Ich versuche, zwei Tabellen zu verbinden, aber ich habe einige Probleme. Dies ist die Haupttabelle, packs
MySQL JOINS: Wählen Sie eine Zeile von Kind-Tabelle ist Bedingung erfüllt ist, sonst NULL
Und hier ist die zweite Tabelle, media
Die media
ist für Bilder von packs
speichern. Jedes Paket kann 0 oder mehr Bilder enthalten. Wenn das Paket Bilder enthält, wird das Feld is_default
auf 1
gesetzt, um das Hauptbild anzuzeigen.
Ich möchte alle Pack und ein Bild für jeden bekommen. Wenn es keine Bilder gibt, dann einfach eine einfache NULL
, sonst erhalten Sie das Bild, das is_default
ist.
Hier ist meine Abfrage.
SELECT
pack.*,
(SELECT media.src FROM packs pack LEFT JOIN packs_media media ON pack.id = media.pack_id WHERE media.is_default = 1 GROUP BY media.id LIMIT 1) AS image
FROM packs pack
LEFT JOIN packs_media ON media.pack_id = pack.id
GROUP BY pack.id
ORDER BY pack.id DESC
Ich habe insgesamt drei Packs, und nur eines von ihnen hat einige Bilder. Die Abfrage gibt 3 Ergebnisse zurück. Das Problem ist, dass alle drei Ergebnisse die gleiche image
haben, wenn nur eins sollte und die anderen beiden das image
Feld null/leer haben sollten.
Gibt es eine Möglichkeit, dies nur mit einer Abfrage zu tun? Ich möchte vermeiden, die Tabelle media
in einer Schleife abzufragen.
Danke
Vielen Dank. Es funktioniert super und es sieht sehr sauber aus. Würde es Ihnen etwas ausmachen, mir zu sagen, ob es möglich ist, zum Beispiel das erste Bild auszuwählen, wenn das Feld is_default nicht 1 ist, aber das Paket noch Bilder hat? Wenn es 1 ist, hol das Bild. Ansonsten hol dir den ersten oder nur einen anderen, damit das Paket mindestens ein Bild hat. Wenn das Paket keine hat, dann null. –
Ich habe meine Antwort geändert, um auf Ihren Kommentar zu antworten. Ich hoffe, dass das hilft, aber ich versuche wirklich, den Gedanken zu verschieben, einen anderen Teil des Codes zu ändern, um diesen Teil einfacher zu machen. Glauben Sie mir, Sie wollen lieber zwei kleinere Fragen, die Sie verstehen, und nicht eine lange, an die Sie sich eine Woche später nicht mehr erinnern werden. –