Hallo,
ich bin mir nicht sicher was die beste(n) Abfrage(n?) für folgendes Problem ist.
Tabellen(Kurzfassung mit Beispieldaten) die bisher gegeben sind:
Tabelle "kinder"
| kindid | elternid | nachname | vorname | gebdatum | betreuungszeit | gruppenid | aufnahme_ab | kuendigung_zum | aktiviert |
| 1 | 1 | Amuster | Amy | 2008-09-20 | 6 | 1 | 2010-07-01 | 2011-09-01 | 1 |
| 2 | 2 | Bmuster | Bert | 2007-01-06 | 8 | 2 | 2008-01-01 | 0000-00-00 | 1 |
| 3 | 3 | Cmuster | Celine | 2005-08-19 | 10 | 2 | 2006-05-01 | 0000-00-00 | 1 |
| 4 | 1 | Amuster | Dennis | 2009-11-03 | 8 | 2 | 2006-09-01 | 0000-00-00 | 1 |
| 5 | 4 | Emuster | Elena | 2009-03-17 | 10 | 1 | 2009-10-01 | 0000-00-00 | 0 |
| 6 | 5 | Fmuster | Falko | 2006-08-16 | 6 | 3 | 2007-01-01 | 0000-00-00 | 1 |
Tabelle "eltern"
| elternid | anrede | nachname_e1 | vorname_e1 | nachname_e2 | vorname_e2 | straße | plz | ort |
| 1 | Familie | Amuster | Anne | Amuster | Andre | Allee 3 | 00345 | Musterstadt |
| 2 | Frau | Bmuster | Birgit | | | Baumweg 16 | 00345 | Musterstadt |
| 3 | Herr | Cmuster | Cris | | | Celler Str. 39a | 00346 | Musterhausen |
| 4 | Familie | Emuster | Elke | Ecke | Emil | Edenweg 12 | 00346 | Musterhausen |
| 5 | Familie | Fmuster | Fiona | Fmuster | Friedrich | Feldstr. 99 | 00345 | Musterstadt |
Tabelle "gruppen"
| gruppenid | bezeichnung |
| 1 | Krümel |
| 2 | Zwerge |
| 3 | Spatzen |
| 4 | Bienen |
Abfrage bisher nach Namen, Betreuungszeit und Adresse aller Kinder der Gruppe z.B. 1 ab Datum z.B. 01.09.2011:
SELECT CONCAT(t1.nachname,', ',t1.vorname) AS name, t1.betreuungszeit, t1.aufnahme_ab, t1.kuendigung_zum, CONCAT(t2.straße,' - ', t2.plz,' ', t2.ort) AS adresse
FROM kinder AS t1, eltern AS t2
WHERE t2.elternid = t1.elternid
AND t1.gruppeid = 1
AND t1.betreuungszeit > 0
AND t1.aktiviert =1
AND t1.aufnahme_ab <= '2011-09-01'
AND (
t1.kuendigung_zum = '0000-00-00'
OR t1.kuendigung_zum IS NULL
OR t1.kuendigung_zum > '2011-09-01'
)
ORDER BY name
Nun ist folgende Tabelle hinzugekommen:
kinder_zukunft
| zid | kindid | gueltig_ab | betreuungszeit | gruppe | aktiviert |
| 1 | 2 | 2011-10-01 | 10 | 2 | 1 | -- Änderung 'betreuungszeit'
| 2 | 3 | 2011-10-01 | 10 | 4 | 1 | -- Änderung 'gruppe'
| 3 | 2 | 2011-11-01 | 6 | 2 | 1 | -- Änderung erneut 'betreuungszeit'
| 4 | 5 | 2011-09-01 | 10 | 1 | 1 | -- Änderung 'aktiviert'
Abfrage neu: Namen, Betreuungszeit und Adresse aller Kinder der Gruppe x ab 01.09.2011 unter Berücksichtigung der Tabelle "kinder_zukunft" ?
Mein Lösungsansatz wäre:
Vor der eigentlichen Abfrage eine Temporäre Tabelle "kinder_temp" anzulegen und die Werte aus "kinder" mit denen von "kinder_zukunft" (welche schon von Bedeutung sind) zu verschmelzen.
Statt die Tabelle "kinder" würde ich dann "kinder_temp" abfragen.
Allerdings habe ich bedenken von der Effizienz des Vorhabens.
Die Tabellen "kinder" und "kinder_zukunft" haben eigentlich noch mehr Spalten und es kann durchaus vorkommen das direkt hintereinander verschieden Daten abgefragt werden. Wenn dann jedes mal ein anderes Datum angegeben wird - hmm... ich weiß nicht was denkt ihr?
Oder doch Sub-Selects, aber geht das überhaupt?
Ich bin absolut kein Sql-Experte, bin immer froh wenn es irgendwie richtig und zuverlässig funktioniert.
Ach so DBMS ist MySql 5.5.
Gruß Svenchen