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动态分页函数,PHP开发分页必备啦
Nov 07 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 PHP
PHP大文件及断点续传下载实现代码
Aug 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
PHP中使用CURL获取页面title例子
2015/01/07 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python中os.path用法分析
2015/01/15 Python
Python中装饰器的一个妙用
2015/02/08 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
python切割图片的示例
2020/11/12 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
在线课程:Skillshare
2019/04/02 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
应届生找工作求职信
2014/06/24 职场文书
交通安全月活动总结
2015/05/08 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
检讨书之工作不认真
2019/08/14 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python