1

コードの a 内に次のクエリがありますが、実際にselect if含まれている行が何をしているのか思い出せません。@lastComment := time

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 は単なる一時変数保持時間のように見えますが、なぜそれが必要なのかわかりません。他のクエリに渡すだけですか?

4

1 に答える 1

0

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

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

これは次のように変換されます:指定された式が NULL かどうかを確認し、そうであれば 1 を返し、そうでなければ式の値を返します。

于 2012-05-13T06:44:30.900 に答える