2012-03-05 10 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は、オペレータは2つの形式があり等しくありません'!='と '<>'は両方とも "not equals"を意味します。それらは '='を使うことの反対です。 –

答えて

3
AND user_1_id <> 53 

も同様に動作します(違う)。あなたはMySql documentationで読むことができるよう

+0

ORDER BYの前と最後のORの後に追加しますか? –

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 

あなたは等しくないために!=または<>を使用することができます。 ORの前にANDが実行されるので、かっこも必要です。 MySql Operator Precedentを参照してください。

+0

完璧、ありがとう! –

+0

最初に単一の<>チェックを入れて論理を短くするのは意味がありますか? 1つの条件で失敗する可能性があり、最大4つのチェックができなくなります。それはちょっとした改善だと思います。 –

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 
関連する問題