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开发的一些注意点总结
Oct 12 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
PHP5常用函数列表(分享)
Jun 07 PHP
php画图实例
Nov 05 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
php、java、android、ios通用的3des方法(推荐)
Sep 09 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
yii操作session实例简介
2014/07/31 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
Jquery中dialog属性小记
2010/09/03 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
在Django的视图中使用数据库查询的方法
2015/07/16 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
python的继承知识点总结
2018/12/10 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
大学生求职推荐信
2013/11/27 职场文书
中学自我评价
2014/01/31 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
小学作文评语大全
2014/04/21 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
小学思品教学反思
2016/02/20 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS