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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
用mysql内存表来代替php session的类
Feb 01 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
Yii中CGridView关联表搜索排序方法实例详解
Dec 03 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 PHP
PHP操作Redis常用命令的实例详解
Dec 23 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 事务处理数据实现代码
2010/05/13 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
python刷投票的脚本实现代码
2014/11/08 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Python hashlib模块实例使用详解
2019/12/24 Python
通过实例解析Python return运行原理
2020/03/04 Python
python如何实现图片压缩
2020/09/11 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
经典毕业生求职信
2014/07/12 职场文书
农村文化活动总结
2014/08/28 职场文书
2014年工会工作总结
2014/11/12 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
教你怎么用Python生成九宫格照片
2021/05/20 Python
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python