2010-12-17 11 views
3

IF THEN文をmysql selectで使用したいが、それを理解できない。コメントがまだない場合、コメント作成された値はアイテム自体の作成された値でなければなりません。これは、クエリです:MySql Then Select Statementで

SELECT item.*, 
    count(comments.itemid) AS commentcount, 
    max(comments.created) AS commentcreated 
FROM table_items AS item 
LEFT JOIN table_comments AS comments ON (comments.itemid = item.id) 
WHERE item.published=1 
GROUP BY item.id 
ORDER BY item.created DESC 

私はこれを考え出したのだが、それは動作しません:

... 
, IF max(comments.created)!='NULL' 
THEN max(comments.created) AS commentcreated 
ELSE item.created AS commentcreated 
END IF; 
FROM ....... 

これを行うには(最善)の方法は何ですか?

答えて

10

あなたは一部として、単一の文にIF ... THEN ... ELSE建設をインラインで使用することはできませんIFNULL

IFNULL(max(comments.created), item.created) AS commentcreated 

OR IF

IF(max(comments.created)='NULL', max(comments.created), item.created) 
AS commentcreated 
+0

うわー、ありがとう!魅力的な作品! – Bert

4
coalesce(max(comments.created), item.created) as commentcreated 
+0

他にもあります。これを選択する理由:IFNULL(max(comments.created)、item.created)コメントを作成しましたか? – Bert

+0

私はMySQLに 'IFNULL'があることを知らなかった。 'COALESCE'は2つ以上の値を扱いますが、この場合は必要ありません。 – RedFilter

0

を使用することができますajrealとRedfilterが示唆しているように、IFNULLとCOALESCE関数のためのものです。

IF ... THEN ... ELSEは、多数の異なるステートメントを含むSQLコードのブロックでのみ機能します。ストアドプロシージャ内で実行します。