Php 检查mysql列中是否存在特定值
我有一个名为categories的mysql专栏。它可以包含如下单个或多个值:1或2或1,2,3或2,12 我尝试获取所有包含值2的行Php 检查mysql列中是否存在特定值,php,mysql,Php,Mysql,我有一个名为categories的mysql专栏。它可以包含如下单个或多个值:1或2或1,2,3或2,12 我尝试获取所有包含值2的行 $query = "SELECT * FROM my_table WHERE categories LIKE '2'"; $rows = mysql_query($query); 如果列只有值2,但没有值1,2,3或2,12,则返回行。如何获取包括值2在内的所有行?您可以使用以下任一选项: %是一个通配符,因此它将匹配2或1,2等。2两侧的任何内容。问题是它可
$query = "SELECT * FROM my_table WHERE categories LIKE '2'";
$rows = mysql_query($query);
如果列只有值2,但没有值1,2,3或2,12,则返回行。如何获取包括值2在内的所有行?您可以使用以下任一选项:
%
是一个通配符,因此它将匹配2
或1,2
等。2
两侧的任何内容。问题是它可能匹配21、22等
$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'";
相反,您应该考虑MySQL函数,它期望值的逗号分隔列表。
$query = "SELECT * FROM my_table WHERE find_in_set('2', `categories`)";
就像@jitendrapurohut所说的,你可以使用
$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'";
$rows = mysql_query($query);
但是像这样储存收藏品真的很糟糕。更好的方法如下:
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链接解释了为什么这样存储集合是不好的…在查询器函数中使用->
%2%
在集合中查找类似于在集合中查找('2',类别)
。在集合中查找是有效的。谢谢!:)您好,@Jqrp请尝试此查询此查询不会很好地工作-例如,它将包括类别为“23”或“102”的行,但不需要这些行。
SELECT * FROM my_table WHERE categories LIKE '%2%' AND categories!='1,2,3' AND categories!='2,12';