2012-03-05 69 views
1

这是MySQL查询我运行:MySQL查询不是

SELECT * 
    FROM wp_social_stuff_events 
    WHERE `user_1_id` = 63 
     OR `user_1_id` = 143 
     OR `user_2_id` = 63 
     OR `user_2_id` = 143 
    ORDER BY `event_timestamp` DESC LIMIT 100 

我将如何使用查询,但是说我不想要任何结果,其中“user_1_id”是53?我在最后尝试使用AND user_1_id NOT 53,但我似乎无法让它工作(不知道它是否是正确的方式)?

任何想法?

+0

MySQL的不等于运算符有两种形式,你可以互换使用:'!='和'<>'都表示“不等于”。它们与使用'='相反。 – 2012-03-05 17:47:02

回答

3
AND user_1_id <> 53 

也可以工作(不同于)。

+0

所以我会在ORDER BY之前和最后一个OR之后添加? – 2012-03-05 17:44:41

6
SELECT * 
FROM wp_social_stuff_events 
WHERE (`user_1_id` = 63 
OR `user_1_id` = 143 
OR `user_2_id` = 63 
OR `user_2_id` = 143) 
AND user_1_id <> 53 
ORDER BY `event_timestamp` DESC LIMIT 100 

可以使用!=或<>不等于你可以在阅读MySql documentation。它还需要有括号,因为AND是在OR之前执行的。见MySql Operator Precedent

+0

作品完美,谢谢! – 2012-03-05 17:47:14

+0

首先将单个<>检查短路循环逻辑是否有意义?一个条件可能会导致失败,最多可以阻止另外4个人的检查。我意识到这是一个很小的改进。 – 2012-03-05 17:48:34

0
SELECT * 
    FROM wp_social_stuff_events 
    WHERE `user_1_id` = 63 
     OR `user_1_id` = 143 
     OR ((`user_2_id` = 63 OR `user_2_id` = 143) 
     AND `user_1_id` <> 53) 
    ORDER BY `event_timestamp` DESC LIMIT 100