【问题标题】:MySQL SELECT statement that groups results by id?MySQL SELECT 语句按 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 处理分组。

【问题讨论】:

    标签: php mysql select group-concat


    【解决方案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。但是上校弹片的问题仍然相关。
    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多