GROUP_CONCAT
GROUP_CONCAT([DISTINCT] expr [ORDER BY …] [SEPARATOR str])
Verbindet die Werte aus allen Zeilen einer Gruppe zu einer Zeichenkette. Das Standardtrennzeichen ist ein Komma; Reihenfolge und Trennzeichen lassen sich einstellen. NULL wird übersprungen.
Parameter
- expr – der verbundene Wert (es können mehrere sein; sie werden ohne Trennzeichen verbunden).
- DISTINCT – optional, nur verschiedene Werte.
- ORDER BY – optional, die Reihenfolge der Werte.
- SEPARATOR – optional, das Trennzeichen, standardmäßig ','.
Beispiele
Die Beispiele mit den Tabellen customers, products und orders verwenden die Beispieldatenbank aus der Serie SQL-Grundlagen.
SELECT category, GROUP_CONCAT(name ORDER BY name SEPARATOR ', ') AS product_list FROM products GROUP BY category ORDER BY category;
+-------------+------------------------------+ | category | product_list | +-------------+------------------------------+ | Accessories | Coffee grinder | | Drinks | Coffee beans 1 kg, Green tea | | Food | Cane sugar | | Tableware | Glass teapot, White mug | +-------------+------------------------------+
Eine Liste der Städte der Kunden ohne Wiederholung:
SELECT GROUP_CONCAT(DISTINCT city ORDER BY city SEPARATOR ' · ') AS cities FROM customers;
+-----------------------------+ | cities | +-----------------------------+ | Leeds · London · Manchester | +-----------------------------+
Worauf Sie achten sollten
- Das Ergebnis wird stillschweigend auf die Länge group_concat_max_len gekürzt – in MySQL beträgt der Standardwert nur 1.024 Byte, in MariaDB 1 MB. Für lange Listen setzen Sie SET SESSION group_concat_max_len = 100000.
- Eine Liste in einer Zeichenkette eignet sich für die Anzeige. Für die weitere Verarbeitung in PHP laden Sie die Zeilen besser einzeln.
Siehe auch:
CONCAT_WS()
COUNT()
FIND_IN_SET()
JSON_ARRAY()