web-dev-qa-db-de.com

Wie gruppiere ich mysql-Zeilen mit demselben Spaltenwert in einer Zeile?

Ich habe zwei Tabellen, Schlüsselwörter und Daten.

Tabellenschlüsselwörter haben 2 Spalten (ID, Schlüsselwort), Tabellendaten haben 3 Spalten (ID [Fremdschlüssel von keywords.id], Name, Wert).

Ich benutze diese Abfrage:

SELECT k.id, d.value, d.name
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id

es gibt etwas zurück wie:

1 123 name1
1 456 name2
2 943 name1
3 542 name1
3 532 name2
3 682 name3

Jede ID kann Werte von 0 bis 3 annehmen (möglicherweise in Zukunft mehr).

Wie kann ich alle Zeilen mit derselben ID in derselben Zeile abrufen?

Mögen

1 123 456
2 943
3 542 532 682

Ich möchte dies tun, weil ich die Werte sortieren können möchte.

43
jarkam

Verwenden Sie GROUP_CONCAT() wie folgt:

 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

Möglicherweise müssen Sie auch ORDER BY d.name, um die exakte Reihenfolge der Werte zu erhalten. So was:

 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