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中var_dump方法的使用详解
Jun 24 PHP
php字符串函数学习之strstr()
Mar 27 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
php简单实现发送带附件的邮件
Jun 10 PHP
php中 $$str 中 "$$" 的详解
Jul 06 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
thinkPHP查询方式小结
Jan 09 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
php自动加载代码实例详解
Feb 26 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常用文件操作函数汇总
2014/11/22 PHP
php生成二维码
2015/08/10 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
JS实现多选框的操作
2020/06/24 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
审计工作个人的自我评价
2013/12/25 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
班组安全员工作职责
2014/02/01 职场文书
酒鬼酒广告词
2014/03/21 职场文书
带病坚持工作事迹
2014/05/03 职场文书
幼儿教师个人总结
2015/02/05 职场文书
学生会招新宣传语
2015/07/13 职场文书
素质教育学习心得体会
2016/01/19 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA