Ilja: 3 Tabellen verknüpfen + Distinct :(

Beitrag lesen

yo,

SELECT DISTINCT * FROM Veranstaltung
LEFT JOIN  VeranstaltungDatum ON  Veranstaltung.ID = VeranstaltungDatum.Veranstaltung_ID
LEFT JOIN Datum   ON VeranstaltungDatum.Datum_ID = Datum.ID

für testzwecke mag es sinnvoll sein einen * für alle spalten zu wählen, im betrieb sollte das aber vermieden werden, wenn kein wirklicher grund dafür darliegt.

des weiteren erscheinen mir deine drei tabellen auf den ersten blick als eine zuviel. es sei den, die gleiche veranstaltung kann auch beim gleichen datum (tag, bzw. stunde) mehrfach vorkommen. ist dies nicht der fall, könnte man sie zu zwei kürzen.

Veranstaltung
-------------
ID                <---- Primärschlüssel
Bezeichung
usw.

VeranstaltungDatum
------------------
Veranstaltung_ID  <---- Primärschlüssel
Datum             <---- Primärschlüssel

ich nehme das einfach mal an, dass ein und dieselbe veranstaltung nicht am gleichen tag, stunde mehrfach vorkommt. damit habe ich dann einen zusammengesetzten primärschlüssel über zwei spalten, der meine datensätze eindeutig identifizieren kann.

Also jede Veranstaltung soll einmal ausgewählt werden, mit dem passendem Datum .. wie mache ich das denn?
Ich komme einfach nicht weiter :(

da gibt es mehrere möglichkeiten und hängt ein wenig von deinen vorgaben ab. die erste frage ist, willst du alle Datumswerte haben, wo eine veranstaltung stattgefunden hat und stattfinden wird. also benötigst du auch die vergangennen veranstaltungen oder kann man diese schon einmal rausschmeissen. dann ist die frage, ob du alle kommenden veranstaltungen brauchst oder dir das nächst kommende datum reicht. bei nur einem gesuchten datumswert, kann man das dann mit einer abfrage lösen.

willst du mehrere datumswerte haben, dann gibt es zwei wege. entweder so, wie du es gemacht hast und du ordnest die ergebnisse auf programmebene, zum beispiel mit php. oder aber du gehst über zwei abfragen. in der ersten suchst du nach den veranstalter und in der zweiten nach den entsprechenden datumswerten, wobei du innerhalb der schleife der ersten abfrage, die zweite abfrage machst.

1. SELECT id, veranstaltungsname, organisator... FROM veranstaltung;

2. SELECT datum FROM veranstaltungdatum WHERE veranstaltungs_id=id_des_veranstalters_aus_der_ersten_abfrage;

damit hättest du in der ersten tabelle nur einen Veranstalter und alle seine datumswerte in der zweiten.

Ilja