2012-05-11 5 views
1

私のコードでselect ifの内部に次のクエリがあります。@lastComment := timeが実際に含まれている行が何であるか覚えていませんか?MySQLクエリで@variable:= variable2の意味は何ですか?

SELECT 
    IF(
     (SELECT @lastComment := `time` 
     FROM usermessages 
     WHERE userId = $userId 
     ORDER BY id DESC 
     LIMIT 1) 
    IS NOT NULL, 
    DATE_SUB(NOW(), INTERVAL 30 SECOND) >= @lastComment, 1 
    ) 

@lastCommentだけの一時的な変数の保持時間ですが、それが必要なのは、なぜ私は理解していない、それは他のクエリにそれを渡すだけであるように見えますか?

+0

このクエリは厄介です。その意図でより明確になるように書き直すことができました。 –

+0

良い説明はこちらhttp://stackoverflow.com/questions/1009954/mysql-variable-vs-variable-whats-the-difference – Elen

+0

@ p.campbellはい、これは私が今やっていることです実際に行が私を止めているものです – Dan

答えて

0

明らかにあなたが二回クエリを実行したくなかったし、それは正しいのですが、あなたは簡単にユーザー定義変数を省略するので、それをより明確にすることができます

SELECT 
    IFNULL(
    (
     SELECT DATE_SUB(NOW(), INTERVAL 30 SECOND) >= `time` 
     FROM usermessages 
     WHERE userId = $userId 
     ORDER BY id DESC 
     LIMIT 1 
    ) 
    , 1 
) 

に換算さ:与えられた場合チェックexpressionがNULLの場合は1を返し、そうでない場合は式の値を返します。

関連する問題