Mysql的GROUP_CONCAT()函数使用方法

时间:2021-05-26

语法:

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;

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章