Mysql的GROUP_CONCAT()函数使用方法
Mysql的GROUP_CONCAT()函数使用方法
发布时间:2016-12-29 来源:查字典编辑
摘要:语法:GROUP_CONCAT([DISTINCT]expr[,expr...][ORDERBY{unsigned_integer|col_...

语法:

GROUP_CONCAT([DISTINCT]expr[,expr...][ORDERBY{unsigned_integer|col_name|expr}[ASC|DESC][,col_name...]][SEPARATORstr_val])

下面演示一下这个函数,先建立一个学生选课表student_courses,并填充一些测试数据。

SQL代码

复制代码 代码如下:

CREATETABLEstudent_courses(

student_idINTUNSIGNEDNOTNULL,

courses_idINTUNSIGNEDNOTNULL,

KEY(student_id)

);

INSERTINTOstudent_coursesVALUES(1,1),(1,2),(2,3),(2,4),(2,5);

若要查找学生ID为2所选的课程,则使用下面这条SQL:

SQL代码

复制代码 代码如下:

mysql>SELECTstudent_id,courses_idFROMstudent_coursesWHEREstudent_id=2;

+------------+------------+

|student_id|courses_id|

+------------+------------+

|2|3|

|2|4|

|2|5|

+------------+------------+

3rowsINSET(0.00sec)

输出结果有3条记录,说明学生ID为2的学生选了3、4、5这3门课程。

放在PHP里,必须用一个循环才能取到这3条记录,如下所示:

PHP代码

复制代码 代码如下:

foreach($pdo->query("SELECTstudent_id,courses_idFROMstudent_coursesWHEREstudent_id=2")as$row){

$result[]=$row['courses_id'];

}

而如果采用GROUP_CONCAT()函数和GROUPBY语句就显得非常简单了,如下所示:

SQL代码

复制代码 代码如下:

mysql>SELECTstudent_id,GROUP_CONCAT(courses_id)AScoursesFROMstudent_coursesWHEREstudent_id=2GROUPBYstudent_id;

+------------+---------+

|student_id|courses|

+------------+---------+

|2|3,4,5|

+------------+---------+

1rowINSET(0.00sec)

这样php里处理就简单了:

PHP代码

复制代码 代码如下:

$row=$pdo->query("SELECTstudent_id,GROUP_CONCAT(courses_id)AScoursesFROMstudent_coursesWHEREstudent_id=2GROUPBYstudent_id");

$result=explode(',',$row['courses']);

分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:

SQL代码

复制代码 代码如下:

SELECTstudent_id,GROUP_CONCAT(courses_idSEPARATOR'|||')AScoursesFROMstudent_coursesWHEREstudent_id=2GROUPBYstudent_id;

除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排:

SQL代码

复制代码 代码如下:

SELECTstudent_id,GROUP_CONCAT(courses_idORDERBYcourses_idDESC)AScoursesFROMstudent_coursesWHEREstudent_id=2GROUPBYstudent_id;

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新php教程学习
热门php教程学习
编程开发子分类