Interessante mySQL Funktion Group_Concat

800px-SQLOft ist man wirklich genötigt die unmöglichsten Funktionen zu “erfinden” oder freut sich, wenn diese bereits existieren. 🙂

In Datenbanken kann häufig das Problem auftreten dass man gern dort bereits Daten gruppieren möchte… aber oftmals kann man dafür nur Skalarwertfunktionen wie avg, max oder min nutzen. In mySQL gibt es gerade für Strings noch die Funktion group_concat.

Stellt euch mal vor, ihr habt 3 Zeilen in der DB und wollt die Spalte name z.b. gern Komma-getrennt in eurer Abfrage haben.. 😉

phpEcbMMr

Tabelle 1 sind die Nutzer, Tabelle 2 sind die Straße die sie besitzen und die Ausgabe zeigt was wir wollen.

Erreichen kann man das in mySQL nun damit:

SELECT t1.ID, t1.Name, GROUP_CONCAT( t2.street
ORDER BY t1.ID DESC
SEPARATOR ', ' ) AS 'Straße'
FROM tab1 t1
INNER JOIN tab2 t2 ON ( t1.ID = t2.FK )
GROUP BY t1.ID, t1.Name
LIMIT 0 , 30

In TSQL gibt es solche eine Funktion natürlich nicht… 😉 – aber man kann diese wie folgt simulieren:

SELECT t1.ID, t1.name, 
STUFF(
   (
    SELECT ',' + t3.street  FROM tab2 t3 
     WHERE t3.FK = t1.ID FOR XML PATH ('') 
   ) , 1, 1,'') as Street

FROM tab1 t1
INNER JOIN tab2 t2 ON ( t1.ID = t2.FK )

 

Über Danny Sotzny

Hallo, ich bin Danny Sotzny und bin Software- entwickler und Fotograf. Dabei beschäftige ich mich mit aktuellen Technologien und bekannten Problemen. Schwerpunkte setze ich bei der Webentwicklung (PHP/JS) und der Software- entwicklung mit .NET (C#). Der Blog dient für mich selbst als Gedächtnishilfe für typische und alltägliche Probleme, aber auch persönliche Erlebnisse werden veröffentlicht. Ich betreibe zusätzlich noch Foto-Sotzny.de für meine Fotografien und sotzny.net, was meine Webseite für die Softwareentwicklung ist.
Dieser Beitrag wurde unter mySQL, Programmierung, SQL abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Eine Antwort zu Interessante mySQL Funktion Group_Concat

  1. Fabian Jänicke sagt:

    TOP, hat mir geholfen! 👍

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.