知识点: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()的使用的更多相关文章

  1. mysql中find_in_set结合GROUP_CONCAT使用

    SELECT stationid from sys_workstation where FIND_IN_SET(stationid,(SELECT GROUP_CONCAT(opera_area) f ...

  2. mysql 中find_in_set()和in()用法比较

    mysql 中find_in_set()和in()用法比较 在mysql中in可以包括指定的数字,而find_in_set()用于特定的数据类型. find_in_set 函数使用方法 个例子来说:有 ...

  3. Mysql中FIND_IN_SET()和IN区别简析

    来源:http://www.jb51.net/article/125744.htm 测试SQL: CREATE TABLE `test` ( `id` int(8) NOT NULL auto_inc ...

  4. mysql中FIND_IN_SET函数用法

    本篇文章主要介绍mysql中FIND_IN_SET函数用法,用来精确查询字段中以逗号分隔的数据 以及其与 like 和 in 的区别 1.问题发现 之前在做工作任务时有这么一个需求:需要用接口所传的服 ...

  5. mysql中find_in_set()函数的使用

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...

  6. mysql中FIND_IN_SET的使用方法

    在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_ ...

  7. 浅析MySQL中concat以及group_concat的使用

      说明: 本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接 ...

  8. Mysql中contact、group_concat、concat_ws、repeat

    一.CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11','22',' ...

  9. mysql中concat 和 group_concat()的用法

    一.CONCAT()函数CONCAT()函数用于将多个字符串连接成一个字符串.使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为+----+ ...

随机推荐

  1. Matlab批量获取子文件夹与文件名

    批量得到父文件夹下所有子文件夹的路径的MATLAB函数. function [SubFolders] = GetFolders(ParentFolder) %GetFolders % 函数功能为获取父 ...

  2. VMware虚拟机中CentOS7的硬盘空间扩容

    查看centos7系统挂载点信息 扩展VMWare-centos7硬盘空间 对新增加的硬盘进行分区.格式化 添加新LVM到已有的LVM组,实现扩容 1.查看centos7系统挂载点信息 df -h查看 ...

  3. Spark简介 --大数据

    一.Spark是什么? 快速且通用的集群计算平台 二.Spark的特点: 快速:Spark扩充流行的Mapreduce计算模型,是基于内存的计算 通用:Spark的设计容纳了其它分布式系统拥有的功能, ...

  4. django认证01---token

    1.登录鉴权跟 Token 的鉴权区别 以 Django 的账号密码登录为例来说明传统的验证鉴权方式是怎么工作的,当我们登录页面输入账号密码提交表单后,会发送请求给服务器,服务器对发送过来的账号密码进 ...

  5. Redis 常用命令学四:列表类型命令

    1.在列表两端增加值的命令 127.0.0.1:6379> lpush 1 (error) ERR wrong number of arguments for 'lpush' command 1 ...

  6. JVM -- 虚拟机中的对象

    一.HotSpot虚拟机 它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机.我们大致知道虚拟机内存的概况,也许更想了解这些虚拟机内存的数据的其他细节,誓如它们是如 ...

  7. LeetCode_#1_两数之和 Two Sum_C++题解

    1. 两数之和 Two Sum 题目描述 Given an array of integers, return indices of the two numbers such that they ad ...

  8. Python 基础教程 | 菜鸟教程

    https://www.runoob.com/python/python-install.html

  9. POSIX异步I/O接口使用

    POSIX1003.1b 实时扩展协议规定的标准异步 I/O 接口,即 aio_read 函数. aio_write 函数.aio_fsync 函数.aio_cancel 函数.aio_error 函 ...

  10. jq使用ajax请求,返回状态 canceled错误

    在使用jq,ajax请求时出现该错误 原因:button按钮类型为type=submit ,script中又自定用botton按钮点击提交ajax,造成冲突. 解决方法:button按钮类型改为 ty ...