1

如果 field_id_36 为空,是否可以将值 field_id_36 替换为 field_id_39?

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
4

2 回答 2

1

给定样本数据:

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
于 2009-07-21T13:26:27.213 回答
1

你想要的是CASE 声明

您订购的方式看起来像

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

我根据评论对此进行了扩展。关键是您可以嵌套案例。

于 2009-07-21T13:27:52.453 回答