开发的过程遇到了一个问题:
我希望在MySQL数据中对数据表中的某一个字符型字段的内容累加起来,也就是多行数据的字符串链接问题。举个例子。
1
2
3
4
5
6
7
8
9
10
| mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | Jack |
| 1 | Peter |
| 2 | John |
| 2 | Mark |
| 3 | Ellis |
+----+-------+
|
那么我希望通过SQL语句,得到下面这样的结果
1
2
3
4
5
6
| +----+-----------------+
| id | name |
+----+-----------------+
| 1 | Jack,Peter |
| 2 | John,Mark,Ellis |
+----+-----------------+
|
当然之间用什么分隔符,这到无关紧要,重要是的如何得到,我所知道的是,如果这个字段是数值型的,那么使用sum函数配合group
by能做到。但是字符型就不能怎么干了,尝试了concat函数和group by配合,还是不行。
后来去MySQL的文章中心去找函数,看看是否有可以做到这点的,果然你能想到的,也必定是别人想到的呀,在MySQL文章中心找到了group_concat()函数,是的,它就是我所需要的。该函数的具体介绍,看官方文档好了,对于我的问题,仅仅只需要下面这样的SQL语句就搞定。
1
2
3
4
5
6
7
| mysql> select id,group_concat(name) as name from test group by id;
+----+-----------------+
| id | name |
+----+-----------------+
| 1 | Jack,Peter |
| 2 | John,Mark,Ellis |
+----+-----------------+
|
不过这也就意味着,你的代码就不具有数据库独立性了,因为这个函数不是所有的数据库都支持的,管他呢,我暂时还没有想过我现在的这个代码会迁移到其他数据库上去。