MySQL SELECT 语句按 id 分组结果?
Posted
技术标签:
【中文标题】MySQL SELECT 语句按 id 分组结果?【英文标题】:MySQL SELECT statement that groups results by id? 【发布时间】:2011-02-12 15:26:53 【问题描述】:我正在尝试创建一个 mysql SELECT 语句,该语句将从表中选择一堆行,并按行的 id 对结果进行分组(多行将具有相同的 id)。
这是我正在尝试做的一个示例。假设我有下表:
id | name
1 | Art
1 | Arnold
1 | Anatoly
2 | Beatrice
2 | Bertha
2 | Betty
3 | Constantine
3 | Cramer
我想让 MySQL 返回按 id 分组的数据,如下所示:
[1] => Art, Arnold, Anatoly
[2] => Beatrice, Bertha, Betty
[3] => Constantine, Cramer
我知道我可以做一个简单的 SQL 选择,然后在 php 中循环遍历结果,但如果可能的话,我想让 MySQL 处理分组。
【问题讨论】:
【参考方案1】:一种可能的解决方案是使用 MySQL 的 GROUP_CONCAT(expr) 函数。
SELECT
GROUP_CONCAT(name)
FROM
foo
GROUP BY
id
但请记住:
结果被截断为group_concat_max_len系统变量给出的最大长度,默认值为1024。
【讨论】:
@MikeB,它每天都困扰着我:我出生于 10/24。 :P 感谢@VolkerK 的回复,但我肯定会遇到最大长度问题,因为我要处理数千行 =) @user 为什么需要这么多数据?你打算如何处理包含数千个逗号分隔名称的行? @user259878:在当前会话中可以通过SET @@group_concat_max_len:= 1024*100;
更改变量,最大为4294967295。但是上校弹片的问题仍然相关。以上是关于MySQL SELECT 语句按 id 分组结果?的主要内容,如果未能解决你的问题,请参考以下文章
关于MYSQL group by 分组按时间取最大值的实现方法!