FIND_IN_SET函数-表字段使用逗号和分号分隔的数据集查询
工作中遇到的问题,这里用表tb_song
做例子,表结构和数据如图:
为了贴合问题,这里对字段duration
数据做了修改
1,3,5代表父类
2,4,6代表子类
父子之间,分隔
父类之间;分隔
问题
现前端只传一个参数可以是父类可以是子类
查询包含该类的所有数据。
例如:
1.1 查询含有1
的所有数据
返回结果:
1.2 查询含有11
的所有数据
返回结果:
我开始想到like
和in
,但是结果明显不正确,例如1.1模糊查询会把含有“1”的全部查询出来
in字段不好分割。
解决办法:
FIND_IN_SET
函数
使用方法:
FIND_IN_SET(str,strlist)
str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录
假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
1.1 查询语句
SELECT * FROM tb_song WHERE FIND_IN_SET("1",REPLACE(duration,";",","));
1.2 查询语句
SELECT * FROM tb_song WHERE FIND_IN_SET("11",REPLACE(duration,";",","));
项目具体方法参考
WHERE FIND_IN_SET(“11”,REPLACE(duration,“;”,“,”));`
项目具体方法参考