mySQL: SUBSTRING_INDEX + GROUP_CONCAT

Vor einiger Zeit hatte ich das Problem, dass ich mit GROUP_CONCAT unter mySQL eine Gruppe zu einem einzelnen String zusammengeführt habe, aber die Gruppe sehr viele Elemente enthielt. Da das Ergebnis in einer Tabelle ausgegeben werden sollte, wurde der Wert entsprechend zu lang. Also wollte ich diesen, anhand eines Delimiters, auf eine gewisse Anzahl beschränken.

Um dies zu erreichen wollte ich allerdings weder PHP verwenden, noch die Datenbank mit komplexen und geschachtelten String-Funktionen belasten. Und auch für dieses Problem gab es tatsächliche eine sehr einfache Lösung: SUBSTRING_INDEX schmeißt ab einem vorgegebenen Trennzeichen an gewünschter Position (in diesem Fall die dritte) alles weg was noch kommt.

Hier noch ein Beispiel: Ich möchte aus einer Tabelle alle Benutzer und die dazugehörigen e-Mailadressen haben (maximal jedoch nur drei Stück). Ein Benutzer kann also mehrfach mit verschiedenen Adressen in der Tabelle Users eingetragen sein. Das ist zwar kein besonders schönes Datenmodell, zeigt jedoch sehr einfach die Verwendung der Funktionen.

SELECT
username,
SUBSTRING_INDEX(GROUP_CONCAT(eMails SEPARATOR ', '), ',', 3) AS subMails
FROM Users
GROUP BY username

Beitrag veröffentlicht

in

, , ,

von

Schlagwörter: