@variable:= variable2在MySQL查询中的含义是什么?

时间:2012-05-11 15:43:51

标签: mysql

我的代码中的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只是一个临时变量,但是我不明白为什么需要它,是否只是将它传递给另一个查询?

1 个答案:

答案 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,否则返回表达式值。

相关问题