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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
一个简单的自动发送邮件系统(三)
Oct 09 PHP
全文搜索和替换
Oct 09 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 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
初探PHP5
2006/10/09 PHP
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
php对称加密算法示例
2014/05/07 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
JS location几个方法小姐
2008/07/09 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
js实现数组转换成json
2015/06/26 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
用Python解决计数原理问题的方法
2016/08/04 Python
Python ldap实现登录实例代码
2016/09/30 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
护士实习自我鉴定
2013/10/22 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
采购部经理岗位职责
2014/02/10 职场文书
文明家庭事迹材料
2014/12/20 职场文书
老龙头导游词
2015/02/11 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
2014年个人年终总结
2015/03/09 职场文书
律师函格式范本
2015/05/27 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技