Mysql的GROUP_CONCAT()函数使用方法


Posted in PHP onMarch 28, 2008

语法:

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;
PHP 相关文章推荐
Windows下的PHP5.0详解
Nov 18 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
Nov 02 PHP
深入PHP curl参数的详解
Jun 17 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
php文件缓存方法总结
Mar 16 PHP
php对接java现实加签验签的实例
Nov 25 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
YII框架http缓存操作示例
Apr 29 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 PHP
php png失真的原因及解决办法
Nov 17 PHP
php中文字符截取防乱码
Mar 28 #PHP
关于Intype一些小问题的解决办法
Mar 28 #PHP
php5中类的学习
Mar 28 #PHP
php一些公用函数的集合
Mar 27 #PHP
PHP之变量、常量学习笔记
Mar 27 #PHP
php日历[测试通过]
Mar 27 #PHP
PHP与MySQL开发中页面乱码的产生与解决
Mar 27 #PHP
You might like
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python实现购物车功能的方法分析
2017/11/10 Python
Python实现的计数排序算法示例
2017/11/29 Python
python线程池threadpool使用篇
2018/04/27 Python
实例讲解python中的协程
2018/10/08 Python
python矩阵的转置和逆转实例
2018/12/12 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
卖车协议书范例
2014/09/16 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
被告答辩状范文
2015/05/22 职场文书
安全守法证明
2015/06/23 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
SQL中的连接查询详解
2022/06/21 SQL Server