mysql 字符串逗号搜索
程序员文章站
2022-07-14 08:23:50
...
查找user表 str字段。
例如:要搜索的字符串是 1,2,3 【str字段只要包含任何一个就查出来】
最后的结果应该是 id为1,3,4 的三条数据
方法1:
$field = "u.*,d.id as s_id";
$res = $user->alias('u')
->field($field)
->leftJoin('datatree d',"FIND_IN_SET(d.id,u.str)")
->whereIn('d.id',$str)
->group('u.name')
->select();
sql: SELECT `u`.*,d.id as s_id FROM `user` `u` LEFT JOIN `datatree` `d` ON FIND_IN_SET(d.id,u.str) WHERE `d`.`id` IN ('1','2','3') GROUP BY `u`.`name`
方法2:
$str = "1,2,3"; // 要搜索的值
// 准备查找数据库只要包含上面的任何一个就查出来。
$arr = explode(',', $str);
$extra_where = function ($query) use ($arr) {
foreach ($arr as $id) {
$query->whereor(Db::raw("FIND_IN_SET({$id},str)"));
}
};
$query = $user->where($extra_where)->buildSql();
$res = $user->where($extra_where)->column('id');
sql:
SELECT * FROM `user` WHERE ( ( FIND_IN_SET(1,str) ) OR ( FIND_IN_SET(2,str) ) OR ( FIND_IN_SET(3,str) ) )
最后的结果:
下一篇: KMP算法