dedlfix: Frage zur MySql Abfrage

Beitrag lesen

echo $begrüßung;

Mit den Join Statements stehe ich absolut auf dem Kriegsfuß - das habe ich bisher noch nie verstanden wie die Syntax aussehen muß (daher auch meine krude Abfragepraxis....)

Dabei gibt es doch die beiden Artikel Einführung in Joins und Fortgeschrittene Jointechniken.

Wenn du

SELECT ...
  FROM a, b
  WHERE a.feld=b.feld AND a.feld=irgendwas

notierst, hast du Tabelle a mit b verbunden über die Bedingung a.feld=b.feld. Das kannst du auch so notieren:

SELECT ...
  FROM a
    JOIN b ON a.feld=b.feld
  WHERE a.feld=irgendwas

Die Bedingung hinter ON sieht genauso aus wie hinter WHERE, nur dass sie nun direkt als zugehörig zum Join mit der Tabelle b sichtbar ist.

a.feld=irgendwas dient zur Einschränkung der zu beachtenden Datensätze und ist kein Verknüpfungskriterium, weswegen es in der WHERE-Klausel verbleibt.

Die Redundanz ist in diesem speziellen Fall gewünscht bzw. gefordert sonst hätte ich das Problem gar nicht....

Du hast also die Tabellen track, album, track_album und lizenz und du möchtest alle Tracks haben

FROM track

dazu die Lizenz des Tracks

JOIN lizenz AS track_lizenz ON track.lizenz_id = track_lizenz.id

außerdem das Album, das über einer Verknüpfungstabelle mit den Tracks verbunden ist

JOIN track_album ON track.id = track_album.track_id
    JOIN album ON track_album.album_id = album.id

und die Lizenz des Albums

JOIN lizenz AS album_lizenz ON album.lizenz_id = album_lizenz.id

Die Tabelle lizenz wird also zweimal gejoint, ihr aber unterschiedliche Aliasnamen gegeben, damit die jeweils richtigen Werte zusammengebracht werden können und auch bei der Ausgabe der Felder im SELECT-Teil die richtige Lizenz angesprochen werden kann.

Es kann auch notwendig sein, LEFT JOINs statt der (INNER) JOINs zu verwenden. Der Fall tritt ein, wenn zu einem Datensatz aus der links notierten Tabelle kein Datensatz aus der weiter rechts notierten Tabelle existiert (Tracks ohne Album, Tracks oder Alben ohne Lizenz). Der LEFT JOIN bringt dann auch diese Datensätze in der Ausgabe. Für Werte, die aus Feldern der rechten Tabelle kämen, würde in dem Fall NULL in der Ausgabe stehen.

echo "$verabschiedung $name";