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
查询结果:

b.查询相同爱好的人员的id,按照从大到小,用“_”拼接
sql:
SELECT GROUP_CONCAT(id order by id desc separator '_' ),hobby from person1 GROUP BY hobby
查询结果:

mysql中FIND_IN_SET()和GROUP_CONCAT()的使用的更多相关文章
- mysql中find_in_set结合GROUP_CONCAT使用
SELECT stationid from sys_workstation where FIND_IN_SET(stationid,(SELECT GROUP_CONCAT(opera_area) f ...
- mysql 中find_in_set()和in()用法比较
mysql 中find_in_set()和in()用法比较 在mysql中in可以包括指定的数字,而find_in_set()用于特定的数据类型. find_in_set 函数使用方法 个例子来说:有 ...
- Mysql中FIND_IN_SET()和IN区别简析
来源:http://www.jb51.net/article/125744.htm 测试SQL: CREATE TABLE `test` ( `id` int(8) NOT NULL auto_inc ...
- mysql中FIND_IN_SET函数用法
本篇文章主要介绍mysql中FIND_IN_SET函数用法,用来精确查询字段中以逗号分隔的数据 以及其与 like 和 in 的区别 1.问题发现 之前在做工作任务时有这么一个需求:需要用接口所传的服 ...
- mysql中find_in_set()函数的使用
首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...
- mysql中FIND_IN_SET的使用方法
在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_ ...
- 浅析MySQL中concat以及group_concat的使用
说明: 本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接 ...
- Mysql中contact、group_concat、concat_ws、repeat
一.CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11','22',' ...
- mysql中concat 和 group_concat()的用法
一.CONCAT()函数CONCAT()函数用于将多个字符串连接成一个字符串.使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为+----+ ...
随机推荐
- 数据结构与算法学习(二)——Master公式及其应用
本篇文章涉及公式,由于博客园没有很好的支持,建议移步我的CSDN博客和简书进行阅读. 1. Master公式是什么? 我们在解决算法问题时,经常会用到递归.递归在较难理解的同时,其算法的复杂度也不是很 ...
- 解决用cmd编译运行java时的错误
最近上java课程,平时都是用IDEA打代码的,但老师要我们用cmd编译运行,于是在IDEA撸完代码用cmd编译,但却老是编译不出来,有很多乱码.,提示着“错误:GBK的不可映射字符”,又试了几次,着 ...
- Asp.Net Core 自定义验证属性
很多时候,在模型上的验证需要自己定义一些特定于我们需求的验证属性.所以这一篇我们就来介绍一下怎么自定义验证属性. 我们来实现一个验证邮箱域名的自定义验证属性,当然,最重要的是需要定义一个继承自Vali ...
- php-fpm,cgi,fast-cgi,nginx,php.ini,php-fpm.conf,nginx.conf
php-fpm.conf 是PHP-FPM特有的配置文件. php.ini 是所以php模式中必须的配置文件. 两者的区别是,php-fpm.conf 是PHP-FPM进程管理器的配置文件,php.i ...
- Dining(POJ-3281)【最大流】
题目链接:https://vjudge.net/problem/POJ-3281 题意:厨师做了F种菜各一份,D种饮料各一份,另有N头奶牛,每只奶牛只吃特定的菜和饮料,问该厨师最多能满足多少头奶牛? ...
- GBK字符集
GBK字库 编辑 同义词 GBK一般指GBK字库 GBK全称<汉字内码扩展规范>(GBK即“国标”.“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Sp ...
- Ubuntu16.04 换源(或者404 Not Found问题)
当执行sudo apt-get update或者sudo apt-get install命令时,出现以下两个问题: “apt-get 404 Not Found Package Repository ...
- javaSE面试题总结
目 录 第一章 初识Java 1 1. Java跨平台原理(字节码文件.虚拟机) 1 2. Java的安全性 1 3. Java三大版本 2 4. Java开发运行过程 2 5. Java开发环境 ...
- outlook 升级 及邮件同步方式设置
**office(outlook2010 32B)升级到office2016 64B时的操作 1.删除office(excel. word等) 2.选择offcie2016 安装程序安装 (outlo ...
- Sql Server有主外键关系时添加、删除数据
当表之间有主外键关系时删除数据会被约束,添加.删除失败 解决办法,我们可以先把主外键关系的检查约束给关掉 → 然后删除数据 → 之后再把约束打开 查询出关掉所有外键约束的语句 SELECT 'ALTE ...