Thomas Mang: komplexe mySQL Abfrage

Beitrag lesen

Das es nur ein Datensatz ist liegt doch nur am LIMIT.
SELECT f.name, h.fall_beschreibung
FROM fall AS f, fall_historie AS h
WHERE f.id = h.fall_id AND $zeitpunkt > h.zeitpunkt
ORDER BY zeitpunkt
Bringt ein Resultset mit _allen_ namen aus fall mit der fall_beschreibung aus fall_historie, für die es einen Eintrag in fall_historie gibt, dessen zeitpunkt < $zeitpunkt ist, sortiert nach zeitpunkt. Dadurch, durch die Sortierung, können die Fälle natürlich durcheinander geraten, also nicht aufeinander folgend stehen. Eventuell solltest Du hauptsächlich nach h.fall_id und nur innerhalb gleicher ids nach zeitpunkt sortieren.

erm. ja ... ich möchte in der Ausgabe ja _alle_ daten aus fall haben, aber die von fall_historie limitiert auf eins... das ist der kleine knackpunkt der sache...

So dass ich im Endeffekt alle meine Fälle hab, und in einer Tabelle der ich ein Datum übergebe sehen kann, welchen Status alle diese Sachen jeweils diesem Zeitpunkt hatte ... alle anderen zeitpunkte sollen nicht mit ausgegeben werden, sondern alle fälle und jeweils nur ein datensatz zu jedem Fall, aus fall_historie.

als konkretes Beispiel:
nochmal die Tabellen:

fall
  id
  name

fall_historie
  id
  fall_id
  fall_beschreibung
  zeitpunkt

sagen wir mal in fall steht drin:
1 - Projekt Rot
2 - Projekt Blau
3 - Projekt Grün

in fall_historie steht drin:
1 - 1 - Eröffnung - 1.1.2004
2 - 1 - erster Entwurf - 3.1.2004
3 - 2 - Eröffnung - 7.1.2004
4 - 2 - erster Entwurf - 8.1.2004
5 - 3 - Eröffnung - 9.1.2004
6 - 2 - zweiter Entwurf - 10.1.2004
7 - 1 - zweiter Entwurf - 12.1.2004
8 - 2 - Abschluss - 15.1.2004
9 - 1 - Abschluss - 16.1.2004

Bei zB Eingabe des Zeitpunktes: 4.1.2004
Ausgabe:
Projekt Rot - erster Entwurf

oder zB als Zeitpunkt dann : 10.1.2004
erwünschte Ausgabe:
Projekt Rot - erster Entwurf
Projekt Blau - zweiter Entwurf
Projekt Grün - Eröffnung

oder nachher Zeitpunkt: 17.1.2004
erwünschte Ausgabe:
Projekt Rot - Abschluss
Projekt Blau - Abschluss
Projekt Grün - Eröffnung

und da hab ich keine genaue Idee, wie ich das verknüpfen kann :(

Versteh ich das übrigens mit den Joins richtig, das sich left, right und inner join nur unterscheiden, wenn tabellenfelder NULL sind und nicht vorhanden?

Vielen Dank bis hierher ;)