(Freitag, den 18. Dezember 2009 um 09:03 Uhr)
Im Rahmen meines Datenbank Projektes hatte ich folgendes MySQL Problem:
- ein Hotel-Gast kann mehrere Personen mitbringen.
- in einer Übersicht über alle Gäste will ich alle Personen auflisten, die mit diesem Gast gekommen sind.
Das geht entweder in einer extra Tabelle oder zusammen gefasst in einer Zelle (Komma-separiert). Das erste würde meinem Vorsatz eine Übersicht zu zeigen nicht gerecht werden.
Mit CONCAT() kann man mehrere Spalten zu einer spalte zusammenfassen etwa:
SELECT CONCAT(vname, ' ', nname) AS name FROM person;
Das löst mein Problem noch nicht, da ich ja vertikal zusammenfassen möchte. Nach etwas suchen bin ich auf GROUP_CONCAT() gestoßen:
SELECT GROUP_CONCAT( nname SEPARATOR ', ') AS name FROM person;
Wenn man zusätzlich den Vornamen haben möchte:
SELECT GROUP_CONCAT( CONCAT(vname, ' ', nname) SEPARATOR ', ') AS name FROM person;
Dann kommt so etwas wie „Karl Müller, Hein Blöd, Max Mustermann“ heraus.
Das kann man dann in ein SQL Statement einfügen