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 相关文章推荐
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
php 多线程上下文中安全写文件实现代码
Dec 28 PHP
PHP 魔术函数使用说明
May 14 PHP
php中定义网站根目录的常用方法
Aug 08 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
nginx下安装php7+php5
Jul 31 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
Laravel路由研究之domain解决多域名问题的方法示例
Apr 04 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 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/04/03 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
python实现的希尔排序算法实例
2015/07/01 Python
Python实现二维有序数组查找的方法
2016/04/27 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
python pygame实现五子棋小游戏
2020/10/26 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Python restful框架接口开发实现
2020/04/13 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
材料物理专业个人求职信
2013/12/15 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
门面房租房协议书
2014/08/20 职场文书
python3操作redis实现List列表实例
2021/08/04 Python