完整的语法如下:
|
1
|
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) |
基本查询
|
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql> select * from aa;+------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200 ||3 | 500 |+------+------+6 rows in set (0.00 sec) |
以id分组,把name字段的值打印在一行,逗号分隔(默认)
|
1
2
3
4
5
6
7
8
9
|
mysql> select id,group_concat(name) from aa group by id;+------+--------------------+| id| group_concat(name) |+------+--------------------+|1 | 10,20,20||2 | 20 ||3 | 200,500|+------+--------------------+3 rows in set (0.00 sec) |
以id分组,把name字段的值打印在一行,分号分隔
|
1
2
3
4
5
6
7
8
9
|
mysql> select id,group_concat(name separator ';') from aa group by id;+------+----------------------------------+| id| group_concat(name separator ';') |+------+----------------------------------+|1 | 10;20;20 ||2 | 20||3 | 200;500 |+------+----------------------------------+3 rows in set (0.00 sec) |
以id分组,把去冗余的name(也就是重复数据)字段的值打印在一行,逗号分隔
|
1
2
3
4
5
6
7
8
9
|
mysql> select id,group_concat(distinct name) from aa group by id;+------+-----------------------------+| id| group_concat(distinct name) |+------+-----------------------------+|1 | 10,20||2 | 20 ||3 | 200,500 |+------+-----------------------------+3 rows in set (0.00 sec) |
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序
|
1
2
3
4
5
6
7
8
9
|
mysql> select id,group_concat(name order by name desc) from aa group by id;+------+---------------------------------------+| id| group_concat(name order by name desc) |+------+---------------------------------------+|1 | 20,20,10 ||2 | 20||3 | 500,200|+------+---------------------------------------+3 rows in set (0.00 sec) |
使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
|
1
|
SET [SESSION | GLOBAL] group_concat_max_len = val; |
若已经设置了最大长度, 则结果被截至这个最大长度。
将环境变量group_concat_max_len 增大。默认是1024.我就设置了session级的环境变量将其变为2048(不够用再加大)。解决该问题