2011-07-14 86 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查詢中看到的那樣,我正在考慮在一個巨大的聲明中列出這些ID,但我想可能有更好的方法來解決這個問題。 100 ORs聽起來不像是最好的解決方案。

+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聲明是好的,但要小心不要撞到服務器max_allowed_packet選項,如果你查詢證明toooooo長。