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 に答える