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下过滤html代码的函数 提高程序安全性
Mar 02 PHP
php实现rc4加密算法代码
Apr 25 PHP
解析mysql 表中的碎片产生原因以及清理
Jun 22 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
如何通过Linux命令行使用和运行PHP脚本
Jul 29 PHP
PHP静态成员变量
Feb 14 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 PHP
PHP strripos函数用法总结
Feb 11 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
Sep 16 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
浅谈js中的this问题
2017/08/31 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
Python中的字符串类型基本知识学习教程
2016/02/04 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
python爬取微信公众号文章
2018/08/31 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
Python __slots__的使用方法
2020/11/15 Python
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
小学语文教学反思
2014/02/10 职场文书
项目合作协议书
2014/04/16 职场文书
党员承诺书格式
2014/05/21 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
在职证明书模板
2015/06/15 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
用python实现监控视频人数统计
2021/05/21 Python