表字段的值为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,表中是否存在名称
答案 0 :(得分:0)
您的cat_id
字段应该只包含一行id
。
您的SQL请求当前不起作用是正常的,因为您正在查找SQL未找到的cat_id 2
或3
。
例如,在第一行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. "', '[[:>:]]')";