Возможно заменить ORDER BY на другое значение, если 1-е значение пустое - PullRequest
1 голос
/ 21 июля 2009

Можно ли заменить значение field_id_36 на field_id_39, если field_id_36 пусто?

SELECT wt.title, wt.url_title, wt.weblog_id, wt.entry_id, wd.field_id_36
    FROM exp_weblog_titles wt
    LEFT JOIN exp_weblog_data wd
    ON wt.entry_id = wd.entry_id
    WHERE wt.weblog_id = {weblog_id_insert}
    ORDER BY field_id_36+0

Итак, теоретически это то, что я пытаюсь сделать:

SELECT wt.title, wt.url_title, wt.weblog_id, wt.entry_id, wd.field_id_36, wd.field_id_39
    FROM exp_weblog_titles wt
    LEFT JOIN exp_weblog_data wd
    ON wt.entry_id = wd.entry_id
    WHERE wt.weblog_id = {weblog_id_insert}
    ORDER BY if(field_id_36)else(field_id_39)+0

Ответы [ 2 ]

1 голос
/ 21 июля 2009

То, что вы хотите, это CASE Statement

Ваш заказ будет выглядеть как

ORDER BY 
     CASE 
      WHEN field_id_36 IS NULL 
        THEN WHEN 
            CASE
              WHEN field_id_2 IS NULL
                THEN field_id_39
              ELSE
                 field_id_2    
            END CASE
        WHEN field_id_4 IS NOT NULL
          THEN field_id_4
     ELSE field_id_36 
     END CASE

Я расширил это на основе комментария. Дело в том, что вы можете вкладывать чехлы.

1 голос
/ 21 июля 2009

Приведенный пример данных:

id_36   id_39
--      --    
1       10
4       40
NULL    2
NULL    3

, этот запрос:

SELECT  wt.title, wt.url_title, wt.weblog_id, wt.entry_id, wd.field_id_36, wd.field_id_39
FROM    exp_weblog_titles wt
LEFT JOIN
        exp_weblog_data wd
ON      wt.entry_id = wd.entry_id
WHERE   wt.weblog_id = {weblog_id_insert}
ORDER BY
        COALESCE(field_id_36, field_id_39)

отсортирует это так:

id_36   id_39
--      --    
1       10
NULL    2
NULL    3
4       40

, а вот этот:

SELECT  wt.title, wt.url_title, wt.weblog_id, wt.entry_id, wd.field_id_36, wd.field_id_39
FROM    exp_weblog_titles wt
LEFT JOIN
        exp_weblog_data wd
ON      wt.entry_id = wd.entry_id
WHERE   wt.weblog_id = {weblog_id_insert}
ORDER BY
        field_id_36, field_id_39

будет сортировать так:

id_36   id_39
--      --    
NULL    2
NULL    3
1       10
4       40
...