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.
Die 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.
Um 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.


