2012-03-05 47 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