GROUP_CONCAT - automatisch Texte "summieren" mit MySQL

11 Dec 2009 um 13:38 - MySQL/Datenbank

Im Sommer musste ich sehr viele alte Projekte anpassen - eine sehr spannende Aufgabe, alten Code durchzusuchen. Eigentlich ist es sehr hilfreich, da es immer was Neues bringen kann. In einem SQL-String habe ich für mich neue Funktion entdeckt - GROUP_CONCAT.

Schade, dass ich das früher nicht kannte :) Typische Aufgabe - einem Wert in Tabelle entsprechen viele Einträge. Man will alle diese Werte anzeigen lassen. Wenn es um Zahlen geht, dann könnte man SUM oder COUNT irgendwie benutzen (für Zahlen verwenden wir meistens aggregate function). Aber mit VARCHAR bzw. Strings geht es nicht.

Nehmen wir an, wir haben folgende Tabelle: Spieler_ID und Clubname. Wir wollen in einem String anzeigen, wo Spieler gespielt hat.

Tabelle: Spieler_ID - Club
1 - Bayern
1 - Schalke
2 - Werder
1 - Eintracht
2 - Freiburg
...

Altes Verfahren: ganze Tabelle auslesen, dann Array bearbeiten und - als Möglichkeit - alles mit implode-Funktion zusammenpacken. Schrekliche Routine... GROUP_CONCAT löst alles mit einer Abfrage:

SELECT Spieler_ID, GROUP_CONCAT(Club) FROM TCLUBNAME GROUP BY Spieler_ID

Ergebnis:

1 - Bayern,Schalke,Eintracht
2 - Werder, Freiburg

GROUP_CONCAT verknüpft automatisch mit Komma, aber sie können es änderm mit SEPARATOR. Zum Beispiel, Web-verknüpfte String mit Tag BR:

SELECT Spieler_ID, GROUP_CONCAT(Club SEPARATOR '<br />') FROM TCLUBNAME GROUP BY Spieler_ID

Leider ist diese Funktion nur ab Version 4.1 erhältlich, aber wer benutzt jetzt sowas? Mehr zum Thema GROUP_CONCAT hier.

Kommentare

Bisland keine Kommentare - sei der erste!


© 2008 Anton Pavlushko - Webentwicklung, Internetmarketing und Suchmaschinenoptimierung (SEO)

0.0066158771514893 sec