mysql中FIND_IN_SET()和GROUP_CONCAT()的使⽤知识点:mysql中FIND_IN_SET和GROUP_CONCAT()的使⽤
(⼀)场景:当我们使⽤mysql数据库,查询⼀张的数据,其中的⼀列存放的是是另⼀张表id⽤“,”拼接的字符串
如下图所⽰:
person表:
hobby表:
我们前端页⾯想展⽰(把person表hobby⼀栏存放hobby表id字符串改成name连接的字符串):
(⼆) sql
这时我们可以使⽤mysql中的两个函数FIND_IN_SET()和GROUP_CONCAT()
sql如下:
SELECT p.id, p.`name`,GROUP_CONCAT(h.`name`) as hobby from person p
LEFT JOIN hobby h ON FIND_IN_SET(h.id,p.hobby)
GROUP BY p.id
(三)那 mysql中FIND_IN_SET()和GROUP_CONCAT() 分别是什么意思呢?
(1)FIND_IN_SET()
语法: FIND_IN_SET(str,strlist)
定义:(1)如果字符串str在由N⼦链组成的字符串列表中,则返回值范围在1-N之间
如:select FIND_IN_SET('c','a,b,c,d') 返回值为 3
(2)如果str不在strlist中或者strlist为空字符串,则返回值为 0
如:select FIND_IN_SET('e','a,b,c,d') 返回值为 0
select FIND_IN_SET('e','') 返回值为 0
(3)如果任意⼀个参数为NULL,返回NULL
如:select FIND_IN_SET('e',NULL),返回值为NULL
使⽤:在下⾯表中,如果我们想查询⼈员爱好弹琴的所有⼈员的话,该怎么查询呢?
我们可以这样写sql:
SELECT * from
(SELECT p.id, p.`name`,GROUP_CONCAT(h.`name`) as hobby from person p
LEFT JOIN hobby h ON FIND_IN_SET(h.id,p.hobby)
GROUP BY p.id) person1
WHERE FIND_IN_SET("弹琴",hobby)
查询结果:
补充使⽤ in的话,场景不适⽤
(2)GROUP_CONCAT()
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc] [separator '分隔符'])
功能:将group by产⽣的同⼀分组中的值连接起来,返回⼀个字符串结果
例如 a.表 person1 数据如下:查询相同爱好的所有⼈的名字
sql:
SELECT GROUP_CONCAT(name),hobby from person1 GROUP BY hobby
查询结果:
mysql group by order by
b.查询相同爱好的⼈员的id,按照从⼤到⼩,⽤“_”拼接
sql:
SELECT GROUP_CONCAT(id order by id desc separator '_' ),hobby from person1 GROUP BY hobby 查询结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论