Mysql的GROUP_CONCAT()函数使用方法

2018-09-21 10:06

阅读:385

  语法:

GROUP_CONCAT([DISTINCT]expr[,expr...][ORDERBY{unsigned_integercol_nameexpr}[ASCDESC][,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_idcourses_id
+------------+------------+
23
24
25
+------------+------------+
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_idcourses
+------------+---------+
23,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;


评论


亲,登录后才可以留言!