2014-10-06 45 views
0

我正在開發PHP腳本與MySQL。我將類型數據存儲爲「1,2,3」(ID)SQL查詢無法正常工作(數字)

然後我遇到了搜索數據的問題。

我的數據表:

METAS表

------------------- 
meta_id,meta_genres 
-------------------- 
|1  |1,2,3  | 

|2  |10,3,4  | 

|3  |12,3,5  | 

------------------- 

我的查詢是

SELECT * FROM metas WHERE meta_genres LIKE '%1%' 

然後返回IDS:1,2,3

我想它返回只是1.

我該如何解決它?

最好的問候。

+2

嘗試'LIKE' %1,%'' – Gowri 2014-10-06 09:33:03

+3

@Gowri:不會......如果1是最後一個,就會失敗......就像4,3,1! – NoobEditor 2014-10-06 09:33:35

+0

你的問題不是那麼確切,所以我會假設你想得到符合你需要的meta_genre的ID(告訴我是否猜錯)。所以你應該改變'SELECT meta_id FROM metas WHERE meta_genre LIKE'%1'';' – 2014-10-06 09:33:38

回答

1

您還可以使用REGEXP只查找組輸入分離1

SELECT * FROM metas WHERE meta_genres REGEXP '[[:<:]]1[[:>:]]' 
+0

謝謝@Girish REGEXP的作品! – 2014-10-06 09:42:34

4

使用FIND_IN_SET(str,strlist) function

SELECT * 
FROM metas 
WHERE FIND_IN_SET(1, meta_genres) 

編輯:如果在接着上述查詢meta_genres逗號之前的空間(例如1 , 2 , 3)可以返回空集。要解決:

SELECT * 
FROM metas 
WHERE FIND_IN_SET(1, REPLACE(meta_genres, ' ', '')); 
+0

親愛的Rimas,你的回答似乎很好。然而它什麼也沒有返回我的查詢是真實的,但我不明白 – 2014-10-06 09:42:05

-1

你將永遠只會回顧1,那是因爲1之後的數字是2,3字符串的一部分。因此,查詢不看這些數字作爲單獨的電話號碼,但只是整個字符串.....

+1

我正在嘗試,但我需要50點聲望點才能添加評論......... – 2014-10-06 09:38:20