phpbar.de logo

Mailinglisten-Archive

[php] [MySQL] Einen join über 3 (?) Tabellen

[php] [MySQL] Einen join über 3 (?) Tabellen

Sebastian Mendel lists at sebastianmendel.de
Don Apr 28 11:25:11 CEST 2005


Schmuck, Michael schrieb:

Thema verfehlt!

bitte das nächste mal:

dbs at phpbar.de
mysql-de at lists.mysql.com
mysql-de at lists.4t2.com


aber trotzdem:

> ich habe ein kleines Problem mit einem SQL Join wo ich nicht so richtig weiter komme.
> 
> Ich habe diese 3 Tabellen: 
> 
> 	1. Fahrzeuge: 	ID, Kennzeichen, Typ ...
> 	2. Firma:		ID, Name, Adresse ...
> 
> 	3. firma_has_fzg: idFZG, idFIRMA, Zugehörig seit (datum)
> 
> 
> Das ganze habe ich jetzt erstmal nur ein wenig Vereinfacht, da der gesamte Join über knapp 6 oder 7 Tabellen geht. Mein Problem ist nun folgendes: Wie bekomme ich zu dem Fahrzeug die aktuell zugewiesene Firma?
> 
> 
> SELECT
>   fzg.id,
>   fzg.kennzeichen,
>   firma.name
> FROM
>   fzg
>   LEFT JOIN firma_has_fzg ON firma_has_fzg.idfzg = fzg.id
> WHERE
>   firma.id = 123
> 
> 
> Soweit so gut, nur bekomme ich nun nicht nur die Autos raus die diese Firma aktuell hat, sondern auch die sie mal hatte. Wie kann ich das mit nur einer Query auf die Datenbank lösen?

wie lässt sich denn überhaupt feststellen ob der Eintrag aktuell ist ?
fehlt da nicht ein Feld 'Zugehörig bis (datum)' ?

oder geht das nur danach wenn keine aktuelleres 'Zugehörig seit (datum)'
für dieses Fahrzeug existiert?

       ...
      FROM fzg
 LEFT JOIN firma_has_fzg
        ON firma_has_fzg.idfzg = fzg.id
 LEFT JOIN firma_has_fzg AS t2
        ON fzg.id = t2.id
       AND t2.'Zugehörig seit (datum)' > firma_has_fzg.'Zugehörig seit
(datum)'
     WHERE firma.id = 123
    HAVING ISNULL( t2.id )

... oder so ähnlich, habs nicht probiert

-- 
Sebastian Mendel

www.sebastianmendel.de
www.sf.net/projects/phpdatetime | www.sf.net/projects/phptimesheet

php::bar PHP Wiki   -   Listenarchive