web-dev-qa-db-ja.com

同じ列値を持つmysql行を1行にグループ化する方法は?

キーワードとデータの2つのテーブルがあります。

テーブルキーワードには2つの列(id、keyword)があり、テーブルデータには3つの列(id [keywords.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を持つすべての行を取得するにはどうすればよいですか?

いいね

1 123 456
2 943
3 542 532 682

値をソートできるようにしたいので、これを行いたいです。

43
jarkam

GROUP_CONCAT() を次のように使用します。

 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

また、_ORDER BY 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
78
shamittomar