我有一個名爲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的所有行?
我有一個名爲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的所有行?
您可以使用如下:
%
是一個通配符,因此將匹配一個2
兩側2
或1,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`)";
find_in_set的作品。謝謝! :) – Jqrp
像@jitendrapurohut說,你可以使用
$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'";
$rows = mysql_query($query);
做,但實在是太差了存儲集合這樣。一個更好的aproach是如下:
然後用這個查詢:
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在此...
SELECT * FROM my_table WHERE categories LIKE '%2%' AND categories!='1,2,3' AND categories!='2,12';
嗨,@Jqrp嘗試這個查詢 – Singh
這不會工作得很好 - 例如它將包括類別爲'23'或'102'的行,但這些不是我們想要的。 –
使用 - >'%2%'在您的查詢 – jitendrapurohit
http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database -column-really-that-bad/3653574 – e4c5
或函數'find_in_set'就像'find_in_set('2',categories)'。 – Blank