服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Mssql|Oracle|Redis|

服务器之家 - 数据库 - Mysql - Mysql的GROUP_CONCAT()函数使用方法

Mysql的GROUP_CONCAT()函数使用方法

2019-10-27 12:03mysql教程网 Mysql

GROUP_CONCAT语法与实例代码

语法: 

GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name ...]][SEPARATOR str_val]) 

下面演示一下这个函数,先建立一个学生选课表student_courses,并填充一些测试数据。 

SQL代码 

复制代码代码如下:


CREATE TABLE student_courses (      
    student_id INT UNSIGNED NOT NULL,      
    courses_id INT UNSIGNED NOT NULL,      
    KEY(student_id)      
);      
INSERT INTO student_courses VALUES (1, 1), (1, 2), (2, 3), (2, 4), (2, 5);    



若要查找学生ID为2所选的课程,则使用下面这条SQL: 

SQL代码 

复制代码代码如下:


mysql> SELECT student_id, courses_id FROM student_courses WHERE student_id=2;      
+------------+------------+      
| student_id | courses_id |      
+------------+------------+      
|          2 |          3 |      
|          2 |          4 |      
|          2 |          5 |      
+------------+------------+      
3 rows IN SET (0.00 sec)  

  

输出结果有3条记录,说明学生ID为2的学生选了3、4、5这3门课程。 
放在PHP里,必须用一个循环才能取到这3条记录,如下所示: 

  

PHP代码 

复制代码代码如下:


foreach ($pdo->query("SELECT student_id, courses_id FROM student_courses WHERE student_id=2") as $row) {      
    $result[] = $row['courses_id'];      
}     


而如果采用GROUP_CONCAT()函数和GROUP BY语句就显得非常简单了,如下所示: 

  

SQL代码 

复制代码代码如下:


mysql> SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;      
+------------+---------+      
| student_id | courses |      
+------------+---------+      
|          2 | 3,4,5   |      
+------------+---------+      
1 row IN SET (0.00 sec)   



这样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来指定,例如: 

  

SQL代码 

复制代码代码如下:


SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;     


除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排: 

SQL代码 

复制代码代码如下:


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;

延伸 · 阅读

精彩推荐
  • MysqlMySQL的语法及其使用指南

    MySQL的语法及其使用指南

    数据库的选取,创建,丢弃和变更 数据表和索引的创建,变更和丢弃从数据表检索信息 ...

    mysql教程网2202019-10-21
  • Mysqlmysql binlog(二进制日志)查看方法

    mysql binlog(二进制日志)查看方法

    在本篇文章里小编给大家分享了关于mysql binlog(二进制日志)查看方法,有需要的朋友们学习下。...

    laozhang4932019-06-09
  • Mysql详解MySql Date函数

    详解MySql Date函数

    这篇文章主要介绍了MySql Date函数的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    linux超3222019-07-07
  • Mysqlnavicat连接mysql出现2059错误的解决方法

    navicat连接mysql出现2059错误的解决方法

    这篇文章主要为大家详细介绍了navicat连接mysql出现2059错误的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    wgx_19972032019-06-16
  • MysqlMySQL在多表上创建视图方法

    MySQL在多表上创建视图方法

    本篇文章给大家分享了MySQL在多表上创建视图方法以及相关技巧,有需要的朋友参考学习下。...

    刘培楠3642019-07-08
  • MysqlGROUP_CONCAT的用法

    GROUP_CONCAT的用法

    今天工作需要,要用到group by等等,查看手册,没想到发现了GROUP_CONCAT这个好东西,一下在省掉了我很多工作,这个函数在 MySQL 4.1 中被加入。函数返回一个...

    脚本之家3252019-10-17
  • MysqlSQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)

    SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析

    这篇文章主要给大家介绍了SQL语句执行的相关内容,文中一步步给大家深入的讲解,包括MySQL架构总览->查询执行流程->SQL解析顺序,需要的朋友可以参考下...

    AnnsShadoW4402019-06-09
  • Mysql从MySQL得到最大的优化性能

    从MySQL得到最大的优化性能

    优化是一项复杂的任务,因为它最终需要对整个系统的理解.当用你的系统/应用的小知识做一些局部优化是可能的时候,你越想让你的系统更优化,你必须知道...

    MySQL技术网1362019-10-15