我将解释我在示例中需要做的事情。首先,我们有一个像这样的简单表,名为 table :
id | name ===+===== 1 | foo 1 | bar 1 | foobar 2 | foo 2 | bar 2 | foobar
现在查询:
SELECT t.* FROM table t GROUP BY t.id
将使我们得到与这一结果相似的结果:
id | name ===+===== 1 | foo 2 | foo
但是是否有可能收集 name的 所有值来得到这样的结果?
id | name ===+================= 1 | foo, bar, foobar 2 | foo, bar, foobar
使用MySQL可以使用GROUP_CONCAT(expr)
此函数返回一个字符串结果,其中包含来自组的串联的非NULL值。如果没有非NULL值,则返回NULL。完整语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
就像是
SELECT ID, GROUP_CONCAT(name) GroupedName FROM Table1 GROUP BY ID