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

显然您不想执行两次查询,这是正确的,但您可以轻松省略用户定义的变量,从而使其更清晰:

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 回答