mysql合并行复制的单元格

时间:2014-01-15 00:11:29

标签: mysql

我有一张这样的表:

Name           | Note                |
--------------------------------------
John Doe       | Smells like cheese  | 
Kelly Smith    | Smells like ham     | 
Richmond White | Smells like apples  | 
John Doe       | Sounds like trumpet | 
Kelly Smith    | sounds like tuba    | 

我在这里找到了部分答案:delete duplicated row and merge cell value mysql,但这只返回第二列中数据的第一次出现。我需要像这样连接它:

Name           | Note                |
--------------------------------------
John Doe       | Smells like cheese  | 
               | Sounds like trumpet |
--------------------------------------
Kelly Smith    | Smells like apples  | 
               | Sounds like Tuba    | 
--------------------------------------

此外,我想在“注释”栏中保留换行符。

提前感谢任何见解!

1 个答案:

答案 0 :(得分:2)

您可以使用GROUP_CONCAT()进行字符串聚合,例如

SELECT name, GROUP_CONCAT(Note) note
  FROM table1
 GROUP BY name

这将产生以下输出:

+----------------+----------------------------------------+
| name           | note                                   |
+----------------+----------------------------------------+
| John Doe       | Smells like cheese,Sounds like trumpet |
| Kelly Smith    | Smells like ham,sounds like tuba       |
| Richmond White | Smells like apples                     |
+----------------+----------------------------------------+

这是 SQLFiddle 演示


  

此外,我想在“备注”栏中保留换行符。

这是一个演示问题,应该在您的客户端代码中完成。例如,在php中,当您迭代结果集并发出正确的换行符时,您可以explode() note列值(如果它处于文本模式,则可能为\n {{1}如果它是HTML输出,则在表格或</br>或其他内容中分隔单元格。

但是如果你想将分隔符更改为逗号以外的任何内容(例如div),你可以使用\n子句

SEPARATOR