group_concat函数实用度其实很广的,在你需要的时候你会发觉这是一个多么有用的函数啊。废话少说,先举例说明下这个函数:
mysql> desc test_group_concat;
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
±------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)
mysql> select * from test_group_concat;
±-----±-----+
| id | name |
±-----±-----+
| 1 | 10 |
| 1 | 20 |
| 1 | 20 |
| 2 | 20 |
| 3 | 200 |
| 3 | 500 |
±-----±-----+
6 rows in set (0.00 sec)
这样一个表结构,这样的内容的test_group_concat表,实用group_concat函数看下效果吧;
mysql> select id,group_concat(name) from test_group_concat;
±-----±--------------------+
| id | group_concat(name) |
±-----±--------------------+
| 1 | 10,20,20,20,200,500 |
±-----±--------------------+
1 row in set (0.01 sec)
1:它能把所有指定列的内容放到一个字段中。
mysql> select id ,group_concat(distinct name ) from test_group_concat;
±-----±-----------------------------+
| id | group_concat(distinct name ) |
±-----±-----------------------------+
| 1 | 10,20,200,500 |
±-----±-----------------------------+
1 row in set (0.00 sec)
2:在函数中加了个distinct关键之,它还是组合了所有的指定字段的内容,不过全是去重再组合。
mysql> select id,group_concat(name separator ‘;’) from test_group_concat;
±-----±---------------------------------+
| id | group_concat(name separator ‘;’) |
±-----±---------------------------------+
| 1 | 10;20;20;20;200;500 |
±-----±---------------------------------+
1 row in set (0.00 sec)
3:实用了关键之separator,用来分隔每个值,也可以看出不使用它时的默认分隔符是“,”这个符号。当然你还可以实用换行符“\r\n”等。
mysql> select id,group_concat(name order by name desc) from test_group_concat;
±-----±--------------------------------------+
| id | group_concat(name order by name desc) |
±-----±--------------------------------------+
| 1 | 500,200,20,20,20,10 |
±-----±--------------------------------------+
1 row in set (0.00 sec)
4:在函数中是用order by能够让组合在一起的值重新排序。
Group_concat函数的语法:
GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name …]]
[SEPARATOR str_val])