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

yiytaume  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(427)

表字段的值为1,2,3(逗号分隔的值),变量的值为2,3。现在我需要使用query和另一个name字段检查天气变量值是否在表字段中
用户表

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,表中是否存在名称

up9lanfz

up9lanfz1#

您可以使用正则表达式检查值是否包含在cat\u 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. "', '[[:>:]]')";
lf5gs5x2

lf5gs5x22#

你的 cat_id 字段只能包含一个 id 按行。
您的sql请求当前不起作用是正常的,因为您正在查找cat\ U id 2 或者 3 sql找不到的。
例如在你的第一排 1,2,3 ,对于mysql,它是一个字符串“1,2,3”,而不是三个id的数组。
如果一个名字能被几只猫使用,也许它们应该是有一个名字的猫 name_id .
如果一只猫可以有几个名字,一个名字可以有几个猫,你应该创建一个新的表 cats_names 包含一个 name_id 还有一个 cat_id 按行。

相关问题