如何将具有相同列值的mysql行分组为一行?

如何将具有相同列值的mysql行分组为一行?,sql,mysql,aggregate-functions,Sql,Mysql,Aggregate Functions,我有两个表,关键字和数据 表关键字有2列(id,关键字),表数据有3列(id[关键字的外键.id]、名称、值) 我正在使用此查询: SELECT k.id, d.value, d.name FROM keywords AS k INNER JOIN data as d ON k.id = d.id 它返回类似于: 1 123 name1 1 456 name2 2 943 name1 3 542 name1 3 532 name2 3 682 name3 每个id可以有0到3的值(将来可能会

我有两个表,关键字和数据

表关键字有2列(id,关键字),表数据有3列(id[关键字的外键.id]、名称、值)

我正在使用此查询:

SELECT k.id, d.value, d.name
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id
它返回类似于:

1 123 name1
1 456 name2
2 943 name1
3 542 name1
3 532 name2
3 682 name3
每个id可以有0到3的值(将来可能会更多)

如何检索同一行中具有相同id的所有行


我之所以要这样做,是因为我希望能够对值进行排序。

像这样使用:

 SELECT k.id, GROUP_CONCAT(d.value)
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id
此外,您可能需要执行
按d.name排序
,以获得所需的精确值顺序。像这样:

 SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ')
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id

这种转换最好是在应用程序端进行,而不是让MySQL进行。我同意Amber的观点,不过如果你仍然只想使用SQL,嗯。。我会在google上搜索“concat”和“groupby”sql函数的详细信息。我之所以这样做是因为我希望能够对值进行排序,所以如果我可以直接从mysql中对其进行排序就太好了。您知道如何轻松地对存储在php数组中的每列进行排序吗?您希望如何准确地存储它们?如果您将它们与
分组依据
连接在一起,则订购不一定保证一致性。您是否忘记了
分组依据k.id
?@Jarkam,因为您在此查询中没有使用
GROUP BY k.id
。是否有方法可以检索不同列中的值?例如,在一列中使用逗号分隔的值代替逗号分隔的值,每个值有不同的列。您可以用任何分隔的值替换逗号分隔的值。请参见带有分隔符“的新示例,该分隔符将按空格分隔值。如果您真的想以一种完全不同的方式显示它们,您可以使用服务器端语言(Perl、PHP等)将逗号分隔的值拆分为单独的值,并以您想要的任何方式显示。在PHP中,这可以通过
explode(',',$csv)实现
 SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ')
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id