Ilja: schwierige Abfrage MySQL

Beitrag lesen

moin,

vehicles2trips

  • id int 11 auto_increment PRIMARY KEY
  • vehicleid int 10 unsigned
  • tripid int 10 unsigned
    (Mir ist klar, dass ich hier eigentlich keine Spalte "id" brauche, aber ich denke nicht, dass diese Spalte Schaden anrichtet ;) )

also eine typische m:n beziehung zwischen den entitätstypen vehicles und trips. und für mich ist es nicht unsinning, noch mal einen zusätzlichen PK wer in der beziehungstabelle zu führen. du solltest aber die beiden fremdschlüssel NOT NULL setzen und einen UNIQUE Key über beide spalten bilden.

"Gib mir den letzten 'trip', dessen starttime kleiner ist als "giventime", und der in 'vehicles2trips' mit "given_vehicleid" verknüpft ist."

zum einen könnte man sich ja auch vorstellen, dass ein fahrzeug nicht auf einem "trip" ist, sondenr im fuhrpark steht. dazu brauchst du dann aber einen zweiten zeitwert bis wann ein trip geht.

Wie kann ich den (/das? Aufklärung erbeten ;) ) Query so erweitern, dass MySQL mit seinen Datums-und Zeitfunktionen die Filterarbeit übernimmt und mir von vornherein nur DEN EINEN Datensatz zurückgibt, den ich suche?

mit einer korrelierten unterabfrage. aber noch ein hinweis, der OUTER JOIN ist falsch herum. du musst von vehicles ausgehen, schließlich kann es ja sein, dass das fahrzeug noch nie auf einem trip war. und dann wird es kniffelig, du musst die korrelierte unterabfrage auch noch in die ON klausel des OUTER JOINS einbauen, eben weil aus oben genannten bedinungen nicht jedes fahrzeug auch einen trip haben muss. allerdings würde ich mir vorher erst mal überlegen, ob du nicht neben der startzeit eines trips auch noch das ende festhälst.

Ilja