首页 技术 正文
技术 2022年11月16日
0 收藏 543 点赞 2,192 浏览 1236 个字

知识点:mysql中FIND_IN_SET和GROUP_CONCAT()的使用

) 场景:当我们使用mysql数据库,查询一张的数据,其中的一列存放的是是另一张表id用“,”拼接的字符串

如下图所示:

person表:

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

hobby表:

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

我们前端页面想展示(把person表hobby一栏存放hobby表id字符串改成name连接的字符串):

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

) 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

  使用:在下面表中,如果我们想查询人员爱好弹琴的所有人员的话,该怎么查询呢?

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

我们可以这样写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)

查询结果:

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

补充使用 in的话,场景不适用

(2)GROUP_CONCAT()

语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc] [separator ‘分隔符’])

功能:将group by产生的同一分组中的值连接起来,返回一个字符串结果

例如 a.表 person1 数据如下:查询相同爱好的所有人的名字

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

 sql:

SELECT GROUP_CONCAT(name),hobby from person1 GROUP BY hobby

查询结果:

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

b.查询相同爱好的人员的id,按照从大到小,用“_”拼接

sql:

SELECT GROUP_CONCAT(id order by id desc separator ‘_’ ),hobby from person1 GROUP BY hobby

查询结果:

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905