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

时间:2016-11-30 06:15:17

标签: php mysql

我有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的所有行?

3 个答案:

答案 0 :(得分:0)

您可以使用以下任一项:

%是一个通配符,因此它会匹配21,2等。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`)";

答案 1 :(得分:0)

就像@jitendrapurohut所说,你可以用

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

但是存储这样的集合真的很糟糕。更好的方法如下:

  1. 类别(id_c,name)=>每个类别的表格
  2. my_table(id_m [,...])
  3. categories_my_table(id_c,id_m)
  4. 然后使用此查询:

    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 :(得分:-1)

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