当前位置:首页 > 数据库 > MYSQL group_concat()函数 将查询结果用,连接起来

MYSQL group_concat()函数 将查询结果用,连接起来

2022年09月17日 13:25:46数据库4

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,先来看一下这个函数的语法:
GROUP_CONCAT([DISTINCT] expr [,expr ...] 
[ORDER BY {unsigned_integer | col_name | expr} 
[ASC | DESC] [,col_name ...]] 
[SEPARATOR str_val]

 

这样,在PHP里就不用循环了,如下所示: 
<?php 
... 
$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id"); 
$result = explode(',', $row['courses']); 
... 
?> 

 

还有分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如: 
mysql> SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id; 

 

 

 

除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排: 
mysql> SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id; 

 

 

 

 

1.int字段的连接陷阱
当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来,
否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串,
而是byte[]。

该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。
select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串

附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name) 
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。 

这个类型 可以是以下值其中的 一个:  
BINARY[(N)] 
CHAR[(N)] 
DATE 
DATETIME 
DECIMAL 
SIGNED [INTEGER] 
TIME 
UNSIGNED [INTEGER]

2.长度陷阱
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。  
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。

作者:江哥哥
来源链接:https://www.cnblogs.com/ymj0906/p/4186919.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/42733.html

标签: MySQL
分享给朋友:

“MYSQL group_concat()函数 将查询结果用,连接起来” 的相关文章

一文带你了解MySQL基础

目录 一,为什么要学习数据库 二,数据库的相关概念 2.1数据库术语...

mysql8.0.25安装配置教程(windows 64位)最详细

mysql8.0.25安装配置教程(windows 64位)最详细

目录 1.官网下载MySQL 2.配置初始化文件my.ini 3.初始化MySQL 4.安装mysql服务并启动+修改密码 5.配置环境变量 6.部分疑难杂病 7.使用连...

JDBC连接时所犯错误1.字符集设置不合适2.连接MySQL8.0社区版时时区不一致3..包名不能以Java.命名4.驱动被弃用

Microsoft JDBC Driver 的主页为:https://msdn.microsoft.com/en-us/data/aa937724.aspx 下载所需驱动 今天连接时报了四次错,记录下来 1.java.sql.SQLException:...

mysql之基础查询

mysql之基础查询

文章目录 DQL语言的学习 进阶1:基础查询 1.查询表中的单个字段 2.查询表中的多个字段 3.查询表中的所有字段 4.查询常量值...

mysql递归查询

  在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。   在MySQL中如果...

会mysql不一定会sql

会mysql不一定会sql

1. 查询缓存 多数MySQL服务器都开启了查询缓存,相同的查询被执行多次,查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。 //查询缓存不开启 $r= mysql_query("SELECT username...

MySQL查询数据库所有表名及其注释

1、查看Mysql 数据库 "ori_data"下所有表的表名、表注释及其数据量 SELECT  TABLE_NAME 表名,TABLE_COMMENT 表注释,TABLE_ROWS 数据量 FROM information_schema.tables WHERE...

mysql 查询或

想对一张表进行查询,满足任意一个条件即可,可以用union实现或查询。 id age gender 1 20 female 2 21 male 3 22 male  ...

mysql查询条件为不等于某个值时,null 查询不到?

mysql 当查询是条件为 where status != ‘1’ 时 当status 为null时查询不到 的坑 今天又碰到了这坑 我要查询status !=‘1’ 的所有数据,数据库中符合要求有17条,可是查询结果只返回了7条,当时就很纳闷,经...

Mysql 查看连接数,状态 最大并发数(赞)

-- show variables like '%max_connections%'; 查看最大连接数 set global max_connections=1000 重新设置 mysql> show...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。