2011-07-14 14 views
2

私はidという列のテーブルを持っていますが、まれにいくつかのID(20〜140個の異なるID)が表示される必要はありません。ユーザー。それはすべて異なる権限に基づいています。Mysql複数のORステートメント

SELECT * FROM `table` WHERE (`id` != 21474 OR 26243 OR 78634) AND `checked` = 5 

残念ながら、このIDのセクションを一度に呼び出すことができるDB内の他のグループ化はありません。だから、これについてもっと良い方法があるのか​​、mysql/SELECT文中でこれを無視し、PHP文のようにすべてを引っ張った後に行うべきかどうかを調べています。 PHP foreachの問題は、引き出されるデータが何百もの行になる可能性があるため、ページが実際に遅くなることです。上記のmysqlクエリで見てきたように、私はちょうど1つの巨大な声明でIDを列挙することを考えていましたが、おそらくこれについてもっと良い方法があると思いました。 100個のORは最良の解決策のようには聞こえません。

+0

これらのuserIdのリストを含む別のテーブルを追加して参加できますか? – Joe

答えて

10

は、INキーワードを使用し、

SELECT * FROM `table` WHERE `id` NOT IN (21474, 26243, 78634) AND `checked` = 5 
+2

+1は良い提案です。 OPの質問に答えるには、正しい構文は 'WHERE(id!= 21474 AND id!= 26243 AND id!= 78634)'です。 – mellamokb

1

IN文は良いですが、あなたは、クエリがtoooooo長いが判明した場合、サーバーのmax_allowed_packetオプションにぶつかるしないように注意してください。

関連する問題