情景:
文章中有标签字段(label),存的是标签ID字符串。
image.png
现在想在文章列表进行筛选,根据标签筛选出对应标签的文章
但是不能用like。SO,FIND_IN_SET函数就大显身手了
FIND_IN_SET
FIND_IN_SET(str,strlist)
str
要查询的字符串
strlist
字段名 参数以”,”分隔 如 (1,2,6,8,10,22)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录
代码实现
倘若想搜索标签ID为2的文章:
SELECT id,label FROM dk_info where FIND_IN_SET ('2',label)
image.png
倘若想搜索标签ID为3的文章:
SELECT id,label FROM dk_info where FIND_IN_SET ('3',label)
image.png
tp5中使用
use think\Db;//tp5和tp6的差别
$condition[] = ['','exp',Db::raw("FIND_IN_SET('2',label)")];
$condition[] = ['','exp',Db::raw("FIND_IN_SET('3',label)")];
thinkphp6中使用
use think\facade\Db;//tp5和tp6的差别
if($cid){
$where[] = ['','exp',Db::raw("FIND_IN_SET($cid,cid)")];
}
image.png