MySQL-SELECT - ich bin leider völlig orientierungslos
Der Ahnungslose
- datenbank
Hallo Welt!
Ich habe ein Problem mit einer MySQL-Datenbank in Verbindung mit einer SELECT-Anfrage. Bitte e-steinigt mich nicht, wenn es irgendwo in der großen, weiten Welt schon eine Antwort auf meine Frage gibt, mir fehlt selbst der grobe Ansatz, wonach ich suchen sollte.
Es existiert eine Tabelle (termine) in folgender Form, die leider als so gegeben angesehen werden muss.
+---------------------------------------------+
-id | -betreff----- | -start------------ | -name--- |
---|---|---|---|
-1- | -Besprechung- | -01.01.2009-11:00- | -Peter-- |
-2- | -Besprechung- | -01.01.2009-11:00- | -Paul--- |
-3- | -Besprechung- | -01.01.2009-11:00- | -Mary--- |
-4- | -Ausflug----- | -02.02.2009-13:00- | -Peter-- |
-5- | -Ausflug----- | -02.02.2009-15:00- | -Paul--- |
-6- | -Kneipentour- | -03.03.2009-18:00- | -Mary--- |
+---------------------------------------------+ |
Ziel:
EIN Termin "Besprechung", wenn "betreff" und "start" bei Einträgen identisch sind, allerdings sollen die Namen der Teilnehmer erhalten bleiben.
Alle anderen Termine benötige ich einzeln.
Mein unzureichender und für diesen Zweck falscher Ansatz war:
SELECT * FROM termine GROUP BY betreff, start;
Problem:
1. Die Benutzernamen (name) gehen beim gruppieren verloren, jedenfalls zwei.
2. Meine Kentnisse in Sachen SQL sind ausgesprochen rudimentär.
Frage:
Gibt es auf (My)SQL-Basis eine Syntax die mir bei meinem Problem helfen könnte?
Mein alternativer Ansatz wäre, die Datensätze alle einzulesen und in ein Array zu schreiben, um diese dann mit Hilfe von PHP zu überprüfen und zusammen zu fassen. Da es sich aber um eine beträchtliche Menge an Daten handelt, würde ich eine SQL-Lösung vorziehen, da ich das starke Gefühl habe, dass sich diese "optimaler" in Sachen performance verhält.
Ich würde mich über jede Anregung freuen, wie ich dieses Problem in den Griff bekommen könnte, egal welcher Art dieser Ansatz ist. Auch Verweise aller Art sind sehr willkommen.
Viele Grüße,
Der Ahnungslose
Hallo,
Es existiert eine Tabelle (termine) in folgender Form, die leider als so gegeben angesehen werden muss.
-id -betreff----- -start------------ -name--- -1- -Besprechung- -01.01.2009-11:00- -Peter-- -2- -Besprechung- -01.01.2009-11:00- -Paul--- -3- -Besprechung- -01.01.2009-11:00- -Mary--- -4- -Ausflug----- -02.02.2009-13:00- -Peter-- -5- -Ausflug----- -02.02.2009-15:00- -Paul--- -6- -Kneipentour- -03.03.2009-18:00- -Mary---
Ziel:
EIN Termin "Besprechung", wenn "betreff" und "start" bei Einträgen identisch sind, allerdings sollen die Namen der Teilnehmer erhalten bleiben.
Alle anderen Termine benötige ich einzeln.
Mein unzureichender und für diesen Zweck falscher Ansatz war:
SELECT * FROM termine GROUP BY betreff, start;
wie so oft: Schlimm, dass MySQL sowas nicht mit einem Syntaxfehler quittiert.
Wenn Du in MySQL nach einer Spalte nicht gruppierst, auf die Du keine Aggregatsfunktion anwendest, dann nimmt MySQL die Aggregatsfunktion
zufall()
und gibt einen beliebigen Wert aus der Gruppe zurück. Dies könnte bei Deiner Besprechung Peter sein, beim nächsten Mal Paul und ein anderes Mal Mary.
Gibt es auf (My)SQL-Basis eine Syntax die mir bei meinem Problem helfen könnte?
Ja, die Aggregatsfunktion GROUP_CONCAT() leistet das, was Du benötigst.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
super, es geht weiter.
Was ich da geschrieben sehe, muss ich erst einmal verdauen, aber das war genau die Art von Hilfe, auf die ich gehofft habe.
Vielen vielen Dank für die blitzschnelle Antwort.
Der Ahnungslose