MYSQL FIND_IN_SET 使用场景

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 的行转列 再翻译,再赋值的,这样使用的话就很方便了。

但是 这个函数性能差,不能走索引,数据多的情况不介意使用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值