mysql find_in_set函数与GROUP_CONCAT函数结合使用

将字符串分割为多条数据;将多条数据合并为一条


设想图1是学生表,图2是老师表;学生id为1的这个人有6个老师,然后我想获取到这个学生的6个老师都叫什么名字
在这里插入图片描述

那么我将会用find_in_set函数来获取,但是获取到的值是这个样子哦
在这里插入图片描述
随后我又用到了GROUP_CONCAT函数,最终结果是这个样子的
在这里插入图片描述
上面是我想最后实现的功能,下面我将展示mysql语句,最后简单说一下这两个函数。


今天修改别人留下的bug,展示出来供自己参考,原因是我以前没接触过这两函数,我以前想实现这种功能就会把那串id拿到java代码中用split分割然后单独写sql出来

一、bug所在

1、我第一次添加完预约发现没什么问题,注意看参与者备注有几个
在这里插入图片描述
在这里插入图片描述

2、再次添加一个或多个就会出现问题,按理来说应该有两条数据,一条备注为“===”,一条为“-----”,下面这种情况是因为find_in_set匹配到一个就合并一个导致的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3、后来我的想法是将最后那个left jion放在inner jion后面,结果就出现了最开始我画图出现的那种情况
在这里插入图片描述

4、后来看着原来的sql沉思了一会儿,最后想到了分组合并多行
在这里插入图片描述
在这里插入图片描述

二、find_in_set函数

FIND_IN_SET(str,strlist)有两参数:
参数1[ str ]:要查询的字符串
参数2[ strlist ]:字段名参数要以”,”分隔(英文状态) ;例如11,22,33,44,55,66
注意如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号返回值的范围在 1 到 N 之间

案例1: 结果为2,因为 22 在strlist集合中放在第二个的位置。
在这里插入图片描述
案例2:结果为0,因为222不在strlist集合中。
在这里插入图片描述

三、GROUP_CONCAT函数

功能:是将要连接的字段按照排序字段的顺序用分隔符连起来显示,默认分隔符是”,”
语法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
参考例子:select id,group_concat(name) from aa group by id

GROUP_CONCAT函数详细用法点这里跳转页面进行查看

猜你喜欢

转载自blog.csdn.net/qq_46100517/article/details/123737563