Php 检查mysql列中是否存在特定值

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两侧的任何内容。问题是它可

我有一个名为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
两侧的任何内容。问题是它可能匹配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);
但是像这样储存收藏品真的很糟糕。更好的方法如下:

  • 类别(id_c,name)=>包含每个类别的表
  • my_表(id_m[,…])
  • 类别\u我的\u表(id\u c,id\u 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链接解释了为什么这样存储集合是不好的…

    在查询器函数中使用->
    %2%
    在集合中查找
    类似于
    在集合中查找('2',类别)
    。在集合中查找是有效的。谢谢!:)您好,@Jqrp请尝试此查询此查询不会很好地工作-例如,它将包括类别为“23”或“102”的行,但不需要这些行。
    SELECT * FROM my_table WHERE categories LIKE '%2%' AND categories!='1,2,3' AND categories!='2,12';