`
nakupanda
  • 浏览: 416344 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用GROUP_CONCAT语法

阅读更多
语法:
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:

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;
分享到:
评论

相关推荐

    【GROUP_CONCAT】使用之MySQL官方文档翻译

    `GROUP_CONCAT` 的基本语法如下: ```sql GROUP_CONCAT([DISTINCT] expr [, expr] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [, col_name]] [SEPARATOR str_val]) ``` 其中: - **`expr`**:...

    wm_concat函数所需资源包

    标题中的"wm_concat函数所需资源包"是指解决`WM_CONCAT()`在新版本Oracle中无法使用的问题的相关资源集合。 描述中提到的链接指向了一篇CSDN博客文章,该文章提供了详细的解决方案。在这里,我们将深入探讨`WM_...

    Mysql的GROUP_CONCAT()函数使用方法

    GROUP_CONCAT()函数的基本语法如下: ```sql GROUP_CONCAT([DISTINCT] expr[, expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [, col_name ...]] [SEPARATOR str_val]) ``` 1. `...

    MySQL统计函数GROUP_CONCAT使用陷阱分析

    首先,GROUP_CONCAT的基本语法是: ```sql GROUP_CONCAT(column_name [ORDER BY column_name2 [ASC|DESC]] [SEPARATOR 'string']) ``` 这个函数在分组查询中用于将同一组内某一列的所有非NULL值合并为一个字符串,每...

    GROUP_CONCAT的用法

    2. GROUP_CONCAT 函数的结果集最大长度为 1024 字符,可以使用 `GROUP_CONCAT_MAX_LEN` 系统变量来调整结果集的最大长度。 3. GROUP_CONCAT 函数忽略空值,可以使用 `COALESCE` 函数来处理空值。 GROUP_CONCAT 函数...

    MySQL中group_concat函数深入理解

    `GROUP_CONCAT`的基本语法如下: ```sql GROUP_CONCAT([DISTINCT] column_name [ORDER BY ASC|DESC column_name] [SEPARATOR 'separator_string']) ``` - `DISTINCT`:可选,用于去除重复的值。 - `column_name`:...

    如何修改Mysql中group_concat的长度限制

    `GROUP_CONCAT`的基本语法如下: ```sql SELECT GROUP_CONCAT(column_name SEPARATOR 'delimiter') FROM table_name GROUP BY group_column; ``` 这里,`column_name`是要合并的列,`separator`是自定义的分隔符...

    mysql的group_concat函数使用示例

    下面我们将详细探讨`GROUP_CONCAT`的使用方式和相关特性。 ### 1. `GROUP_CONCAT`的基本语法 `GROUP_CONCAT`函数的基本语法如下: ```sql GROUP_CONCAT([DISTINCT] expr [ORDER BY expr [ASC | DESC]] [SEPARATOR...

    mysql group_concat()函数用法总结

    首先,`GROUP_CONCAT()`函数的基本语法是: ```sql SELECT GROUP_CONCAT(column_name) FROM table_name WHERE condition GROUP BY group_column; ``` 其中,`column_name`是你希望合并的字段,`table_name`是表名,`...

    浅谈MySQL中group_concat()函数的排序方法

    `GROUP_CONCAT()` 的基本语法如下: ```sql GROUP_CONCAT([DISTINCT] expr [ORDER BY expr [ASC|DESC]] [SEPARATOR str_val]) ``` 在这个语法中,`expr` 是你想包含在结果中的列或表达式,`DISTINCT` 可以用于去除...

    wmsys.wm_concat详细示例.txt

    `wmsys.wm_concat`函数的基本语法如下: ```sql wmsys.wm_concat(column1, column2, ..., columnN) ``` 该函数接受任意数量的参数,并将它们连接成一个字符串。在实际应用中,`column1`, `column2`, ..., `columnN...

    MySQL拼接字符串函数GROUP_CONCAT详解

    **GROUP_CONCAT的基本语法:** ```sql GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val]) ``` - `DISTINCT`:可...

    group_concatenate与locate的联合用法示例

    例如,如果你有一个`orders`表,其中包含`customer_id`和`product_name`字段,你可以使用`GROUP_CONCAT`来获取每个客户的所有订单产品名,以逗号分隔: ```sql SELECT customer_id, GROUP_CONCAT(product_name) AS ...

    mysql group_concat 实现把分组字段写成一行的方法示例

    `GROUP_CONCAT` 的基本语法如下: ```sql GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符']) ``` - `DISTINCT`:可选,用于去除重复的值。 - `要连接的字段`:指定你想...

    MySql采用GROUP_CONCAT合并多条数据显示的方法

    GROUP_CONCAT的基本语法是: ```sql GROUP_CONCAT([DISTINCT] column_name [ORDER BY ... [SEPARATOR '']] ) ``` - `column_name`: 指定你想要合并的列名。 - `DISTINCT`: 可选,用于去除重复的值。 - `ORDER BY`: ...

    oracle合并列的函数wm_concat的使用详解

    最后,关于可能感兴趣的相关文章,包括Oracle中多行记录合并、连接、聚合字符串的不同方法,以及如何在Oracle中实现类似功能的其他技术,如使用`GROUP_CONCAT`(这是MySQL中的一个函数,Oracle没有直接对应的内置...

Global site tag (gtag.js) - Google Analytics