2016-11-30 79 views
0

我有一個名爲categories的mysql列。它可以包含單個或多個值是這樣的:1或2或1,2,3或2,12 ...檢查mysql列中是否存在特定值

我試圖讓含有值2

$query = "SELECT * FROM my_table WHERE categories LIKE '2'"; 
$rows = mysql_query($query); 

這將返回行所有行如果列只有值2,但不是1,2,3或2,12。我如何獲得包含值2的所有行?

+1

使用 - >'%2%'在您的查詢 – jitendrapurohit

+0

http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database -column-really-that-bad/3653574 – e4c5

+0

或函數'find_in_set'就像'find_in_set('2',categories)'。 – Blank

回答

0

您可以使用如下:

%是一個通配符,因此將匹配一個2兩側21,2等什麼。問題是,它可以匹配21,22等

$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'"; 

相反,你應該考慮find_in_set MySQL的函數,它需要一個逗號的值分隔的列表。

$query = "SELECT * FROM my_table WHERE find_in_set('2', `categories`)"; 
+0

find_in_set的作品。謝謝! :) – Jqrp

0

像@jitendrapurohut說,你可以使用

$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'"; 
$rows = mysql_query($query); 

做,但實在是太差了存儲集合這樣。一個更好的aproach是如下:

  1. 類別(id_c,名稱)=>與每個類別
  2. MY_TABLE甲表(id_m [,...])
  3. categories_my_table(id_c,id_m)

然後用這個查詢:

SELECT * 
FROM my_table m 
INNER JOIN categories_my_table cm ON m.id_m = cm.id_m 
INNER JOIN categories c ON cm.id_c = c.id_c 
WHERE 
c.id_c = 2; 

編輯: @ e4c5鏈接解釋了爲什麼它是壞的存儲集合升IKE在此...

-1
SELECT * FROM my_table WHERE categories LIKE '%2%' AND categories!='1,2,3' AND categories!='2,12'; 
+0

嗨,@Jqrp嘗試這個查詢 – Singh

+0

這不會工作得很好 - 例如它將包括類別爲'23'或'102'的行,但這些不是我們想要的。 –