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 相关文章推荐
生成缩略图
Oct 09 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
php eval函数一句话木马代码
May 21 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
php写app用的框架整理
Sep 29 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里的单例类写法实例
2015/06/25 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python中reduce()函数的使用方法示例
2017/09/29 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
美工的岗位职责
2013/11/14 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
学生安全承诺书
2014/05/22 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL