FIND_IN_SET 使用#
FIND_IN_SET(str,strlist)函数
str:可以是字段也可以是字段中的一个数据
strlist:可以使字段集合也可以是以逗号作为分割根据的字符串
使用场景一
查询id为1,2,3,4 的数据,效果类似于 where id in(1,2,3,4)
SELECT * FROM demo WHERE FIND_IN_SET(id,'1,2,3,4')
使用场景二
一般业务中的有的字段 可能会 会存 逗号 , 拼接的 字典code值 之类的数据,如果用到了模糊查询
**模糊查询 id 为 1 的数据 **
SELECT * FROM demo WHERE FIND_IN_SET(1,ids)
类似于 如下的效果
当前端传来 字符串拼接的时间的时候 正常情况下会 转成数组 直接 带入 sql 中 in ,使用这个函数的话 可以直接带入
mapper.xml 文件编写内容
<if test="ids != null and ids != ''">
and FIND_IN_SET (id, #{ids,jdbcType=VARCHAR})
</if>
使用场景三
如图 一张用户表 一张角色name 表,用户表 存在 字段 ,多个角色 逗号分割的形式
SELECT t.tid,t.`name`,GROUP_CONCAT(t2.role_name) FROM demo t
INNER JOIN demo_role t2 on FIND_IN_SET(t2.id,t.role_ids)
GROUP BY t.tid;
效果如下
正常情况 是需要mysql 的行转列 再翻译,再赋值的,这样使用的话就很方便了。
但是 这个函数性能差,不能走索引,数据多的情况不介意使用;