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 相关文章推荐
php下使用SMTP发邮件的代码
Jan 10 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
php处理斐波那契数列非递归方法
Feb 04 PHP
PHP swfupload图片上传的实例代码
Sep 30 PHP
php缩小png图片不损失透明色的解决方法
Dec 25 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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 md5下16位和32位的实现代码
2008/04/09 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
javascript Array对象基础知识小结
2010/11/16 Javascript
AngularJS快速入门
2015/04/02 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
香港化妆品经销商:我的公主
2016/08/05 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
营业员演讲稿
2013/12/30 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
个人委托书怎么写
2014/04/04 职场文书
2015年元旦活动总结
2014/05/09 职场文书
中药学专业求职信
2014/05/31 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
关于感谢信的范文
2015/01/23 职场文书
外贸采购员岗位职责
2015/04/03 职场文书