0

我有这个查询:

SELECT queue.first_dealer, queue.second_dealer, queue.status
FROM queue
WHERE queue.status = 3
AND queue.first_dealer = $user_id
OR queue.second_dealer = $user_id
AND queue.status = 3
ORDER BY id DESC
LIMIT 5

但有时 first_dealer 或 second_dealer 可以相同,如果它们相同,我想跳到下一条记录。

4

3 回答 3

0

[operator precedence][1]由于AND 和 OR 之间,您需要在 WHERE 子句中添加一些括号。将属于一起的条件组合在一起,如下所示:

SELECT queue.first_dealer, queue.second_dealer, queue.status
FROM queue
WHERE queue.status = 3
AND ( queue.first_dealer = $user_id 
      OR queue.second_dealer = $user_id)
AND queue.status = 3 AND 
queue.first_dealer <> queue.second_dealer
ORDER BY id DESC
LIMIT 5

即使在您并不严格需要括号的情况下,如果您这样做,也可能会产生更具可读性的代码。

于 2012-10-08T19:43:25.820 回答
0
SELECT queue.first_dealer, queue.second_dealer, queue.status
FROM queue
WHERE queue.status = 3
AND (queue.first_dealer = $user_id OR queue.second_dealer = $user_id)
AND queue.first_dealer != queue.second_dealer
AND queue.status = 3
ORDER BY id DESC
LIMIT 5
于 2012-10-08T19:44:27.397 回答
0

您应该在WHERE语句中使用括号:

WHERE queue.status = 3 and
      (queue.first_dealer = $user_id OR queue.second_dealer = $user_id)

如果您不希望它们相同,只需添加另一个子句:

WHERE queue.status = 3 and
      (queue.first_dealer = $user_id OR queue.second_dealer = $user_id) and
      queue.first_dealer <> queue.second_dealer
于 2012-10-08T19:44:45.820 回答