2012-10-23 37 views
1

早上好一切,Mysql的檢查WHERE領域IN(multiple_values)

我試圖用一個智者MySQL的一個行會做的事情對我來說不是使用更多的PHP代碼或多個SQL行..這就是它。

我有一個是這樣的老式風格的MySQL的(我將很快轉化爲PDO *):

$query_list_releases = "SELECT * from mya_projects WHERE shared_to IN ('".$_id."') ORDER by deadline ASC"; 

shared_to字段格式是一樣的東西1,3,15,16或1 ,4,6(id用逗號隔開)。如果shared_to只是一個數字,它的工作原理是,因爲它將shared_to ==的行搜索到我的$ _id。但棘手的部分來自於shared_to超過1個數字時,全部用​​逗號分隔。

我需要選擇所有的行,我發現在shared_to列中說「1」。

有沒有人有任何ideea我該如何繼續?

+0

你的數據庫是沒有正確歸一化,這就是爲什麼你有這樣的問題。 –

+0

我選擇將friends_ids添加爲逗號分隔的所有內容,而不是單獨的行,因爲我從另一個項目移植了一個代碼,它被認爲是這樣的。如果它會打擾我,我將切換到爲每個共享項目插入的行。謝啦。 –

回答

5

使用FIND_IN_SET()在MySQL

SELECT * from mya_projects 
WHERE FIND_IN_SET(id, shared_to) 
ORDER by deadline ASC 
+1

重要的是要注意,這不應該用於大表,因爲它必須檢查所有行來構建結果集。 –

+0

好吧,我做了一個快速計算,並將結果排在可能的大桌子上,這個大桌子將在3年左右形成。 200萬的結果會被視爲一張大桌子嗎? –

+1

@AdrianTanase 200萬條記錄足以感受到這個區別:) –