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 相关文章推荐
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
php模板函数 正则实现代码
Oct 15 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
PHP实现批量上传单个文件
Dec 29 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
PDO::errorCode讲解
Jan 28 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 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
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
js实现登录验证码
2016/12/22 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
Pyhton中防止SQL注入的方法
2015/02/05 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
python中zip和unzip数据的方法
2015/05/27 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
pycharm安装和首次使用教程
2018/08/27 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
python selenium循环登陆网站的实现
2019/11/04 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
python中常见错误及解决方法
2020/06/21 Python
派出所所长先进事迹
2014/05/19 职场文书
司机岗位职责范本
2015/04/10 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
工作证明格式范文
2015/06/15 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫