1

我不知道我做错了什么......这是我的代码:

SELECT *
FROM messages
WHERE userId = "6"
OR toUserId = "6"
OR toAll = "1"
AND id <> "4"
ORDER BY time DESC
LIMIT 1

问题是 'is not' (<>) 不起作用,它仍然返回 id 为 4 的结果。有什么问题?

编辑:现在我遇到了以下问题:

SELECT *
FROM messages
WHERE (
    userId = "6"
    OR toUserId = "6"
    OR toAll = "1"
)
AND id <> IN ('4','2')
ORDER BY time DESC
LIMIT 1

问题再次是输出是错误的,这意味着这不起作用。

4

2 回答 2

9

您需要使用括号来指示运算符优先级:

WHERE (
       userId   = "6"
    OR toUserId = "6"
    OR toAll    = "1"
)
AND id <> "4"
于 2013-09-26T18:07:16.283 回答
2

我认为您的查询条件应该是这样的:

WHERE 
(userId = "6" OR toUserId = "6" OR toAll = "1") 
AND (id <> "4")

您的查询将被评估为:

WHERE 
  (userId = "6" OR toUserId = "6") OR (toAll = "1" AND id <> "4")

这不是你想要的。

于 2013-09-26T18:08:09.543 回答