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小偷的核心程序
Apr 09 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
浅析Apache中RewriteCond规则参数的详细介绍
Jun 30 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
php中的常用魔术方法汇总
Feb 14 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
Laravel框架实现定时Task Scheduling例子
Oct 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
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
Javascript实现的分页函数
2006/12/22 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
轻松实现jquery手风琴效果
2016/01/14 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
安装dbus-python的简要教程
2015/05/05 Python
python 实时遍历日志文件
2016/04/12 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
python tkinter实现连连看游戏
2020/11/16 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
《新型玻璃》教学反思
2014/04/13 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
组织生活会发言材料
2014/12/15 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
2019年入党思想汇报
2019/03/25 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python