MySQL: GROUP_CONCAT() – Mächtige Funktion zum Auslesen von unbestimmt vielen Werten

In einigen Situationen muss auf gegebenen Datenquellen aufgebaut werden. Dabei hat man nicht immer die Crème de la Crème der normalisierten, standardisierten und durchdachten Datenaufbewahrung vor sich, sondern zweifelsohne auch deutlich andere Geschichten zu erzählen. Erst kürzlich ist mir wieder ein Fall untergekommen, bei dem ich einen neuen Helfer entdeckte, der in dieser Situation Gold wert war.

Die Daten, die ich vor mir hatten, waren automatisch erzeugt und äußerst ungünstig in der Datenbank abgelegt. Die erste Abbildung zeigt schematisch wie die Daten aufbereitet waren.

AusgangstabelleDie Tabelle enthält Daten zu Veranstalungen (Beispiel ist fiktiv). Das erste Element (ID=1) hat zwei Einträge zu component_ID=1. Dies sind die Redner. Hier Peter und Hans. Die Komponente 2 beinhaltet die Information, ob eine Kostenübernahme stattfindet, die Komponente 3 die Veranstaltungsorte/den Veranstaltungsort und die Komponente 4 die Anzahl der möglichen Gäste.

Das “Problem” liegt auf der Hand: Zu einzelnen Komponenten liegen mehrere Werte/Einträge vor. Will man diese Daten unkompliziert auslesen mit Hilfe von MySQL und dabei folgende Darstellungsform erreichen, ist eine kreative Lösung oder eine gute Funktion gefragt.

ZieltabelleUm dies zu erreichen, habe ich die MySQL-Funktion GROUP_CONCAT() genutzt und in meinen PHP-Code zum Auslesen der Daten eingebaut.


SELECT

`parent`.`id` AS `id`,

(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 1) AS "Redner",
(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 2) AS "Kostenuebernahme",
(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 3) AS "Kostenuebernahme",
(SELECT GROUP_CONCAT(content) FROM `events` `child` WHERE `child`.`id` = `parent`.`id` AND component_ID = 4) AS "Anzahl"

FROM events `parent`
group by id

Mehr Informationen und Beispiele zu den Funktion befinden sich in der MySQL Hilfe.

Abgelegt unter: PHP | Schlagworte: , | Kommentar verfassen

Verfasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst dabei folgende HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>