LEFT JOIN Abfrage eventuell mit einer IF Abfrage ???
Andreaa
- datenbank
- mysql
Hallo,
ich habe ein Problem mit einer Abfrage. Ich hoffe einmal das ich hier richtig bin
.
.
LEFT JOIN pic f ON f.zu=a.id AND galerie=1
.
.
In der tabele pic sind die Informationen zu den gespeicherten Bildern hinterlegt. Es kann sein das mehrere Bilder zu einem Bezug gehören.
Id !zu!datei!galerie
1 ! 1 ! name1 ! 1
2 ! 1 ! name1 ! 0
3 ! 1 ! name1 ! 0
4 ! 1 ! name1 ! 0
Nun Frage ich mit Left JOIN das Gallerie Bild ab zu gebe es in meiner SELECT Anweisung aus. Wenn aber kein Gallerie Bild hinterlegt wurde, kommt auch keine Ausgabe, was ja richtig ist
Wie erweitere ich die Abfrage, so das er dann eines von der anderen Bilder nimmt?
lg Andrea
welches Bild willst du den dann haben
Tach!
Wenn aber kein Gallerie Bild hinterlegt wurde, kommt auch keine Ausgabe, was ja richtig ist
Wie erweitere ich die Abfrage, so das er dann eines von der anderen Bilder nimmt?
Das Problem beim Join ist, dass beide Datenmengen erstmal vorliegen müssen, um sie dann anhand eines Kriteriums vereinen zu können. Wenn die eine Menge aber sozusagen nicht feststeht, sondern sich erst beim Verknüpfen herausstellt, dass man in einigen Fällen andere Daten haben möchte, dann ist das mit dem Join so einfach nicht zu lösen. Der hat keinen Mechanismus für eine solche Auswahl. Stattdessen musst du anderenorts ansetzen.
Eine Variante wäre, auf den Join zu verzichten und stattdessen eine Correlated Subquery zu verwenden. In dieser müsstest du feststellen, ob ein Bild ermittelt werden kann, und wenn nicht, eine weitere Subquery starten, die den Ersatzwert liefert. Da wird wohl IF() oder IFNULL() zum Einsatz kommen müssen.
Eine andere Variante ist, den Left Join zu lassen und im SELECT zu prüfen, ob seitens der Galerie ein NULL kommt und auch hier mit IFNULL() und einer Subquery einen Ersatzwert zu ermitteln. Letzteres scheint mir einfacher zu sein, wenn du eh schon den Join hast und dich nicht erst in Correlated Subquerys einarbeiten möchtest. Obwohl, so schwierig ist das auch wieder nicht.
dedlfix.