我的代码中的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只是一个临时变量,但是我不明白为什么需要它,是否只是将它传递给另一个查询?
答案 0 :(得分:0)
显然你不想执行两次查询,这是正确的,但你可以轻松省略用户定义的变量,从而使它更清晰:
SELECT
IFNULL(
(
SELECT DATE_SUB(NOW(), INTERVAL 30 SECOND) >= `time`
FROM usermessages
WHERE userId = $userId
ORDER BY id DESC
LIMIT 1
)
, 1
)
转换为:检查给定的表达式是否为NULL,如果是,则返回1,否则返回表达式值。