在mysql中用逗号分隔的值检查逗号分隔的字段

时间:2018-04-11 06:10:28

标签: mysql

表字段的值为1,2,3(逗号分隔值),变量为2,3。现在我需要使用查询以及另一个名称字段

来检查天气变量值是否在表字段中

用户表

id name   cat_id
-----------------
1  test   1,2,3
2  test1  3,4
3  test2  4

变量$ value = 2,3

查询:select * from user where name='test' and cat_id IN ('".$value."')

但是对于上面的查询,我得到零数据

如何检查cat_id字段中是否存在给定的id,表中是否存在名称

2 个答案:

答案 0 :(得分:0)

您的cat_id字段应该只包含一行id

您的SQL请求当前不起作用是正常的,因为您正在查找SQL未找到的cat_id 23

例如,在第一行1,2,3中,对于MySQL,它是一个字符串“1,2,3”而不是三个ID的数组。

如果某个名字可以被几只猫使用,那么它们应该是name_id的名字。

如果一只猫有多个名字,一个名字可以有几只猫,你应该按行创建一个新表cats_names,其中包含一个name_id和一个cat_id

答案 1 :(得分:0)

您可以使用正则表达式来检查该值是否包含在cat_id中:

SELECT * FROM user WHERE name='test' AND cat_id REGEXP CONCAT('[[:<:]]', value, '[[:>:]]')

这将尝试在value的任意字边界处匹配cat_id,因此对于cat_id='1,2,3',(例如)'1,2''2'的值, '2,3'将匹配。

以字符串形式(例如PHP):

$sql = "SELECT * FROM user WHERE name='test' AND cat_id REGEXP CONCAT('[[:<:]]','" . $value. "', '[[:>:]]')";