2016-06-02 12 views
1

Ich habe ein paar Probleme. mit der SQL-Anweisung JEFT JOIN. Ich habe 3 Tabellen:MySql LINKE Join mehrere Tabelle mit derselben ID oder Name

Benutzer, Produkte, prod_images.

Wenn ich diese Abfrage ausführen, um Daten, die Beziehung zu erhalten, funktioniert es gut. funktioniert aber nur, wenn die Tabelle prod_images nicht leer ist. wenn der prod_images leer das SQL-Recht kommt das Ergebnis verschmelzen und ich bekomme null auf die products.item_id Array

SELECT products.*, prod_images.*, users.* 
FROM products 
LEFT JOIN prod_images 
    ON products.item_id=prod_images.item_id 
    AND prod_images.is_primary = '1' 
JOIN users 
    ON users.user_id=products.seller_id 
    WHERE products.status = '1' 
    ORDER BY created DESC 

Wie kann ich diese Abfrage funktionieren, wenn die table.prod_images leer ist?

+3

'products.item_id = products.item_id' das ist ziemlich seltsam. – Blank

+0

Können Sie einige Beispieldaten und das erwartete Ergebnis angeben? –

+0

Reno, mein Fehler. sein sollte: prod_images.item_id = products.item_id – david2000

Antwort

0

Ich glaube, Ihre Abfrage ist fast in Ordnung.

Und es gibt alles zurück, was Sie gefragt haben, aber Sie sollten vermeiden, products.*, prod_images.*, users.* anzufordern, weil es leicht ist, uns zu verwirren.

Also, wenn Sie diesen Teil zu SELECT products.item_id PRODUCTS_ITEM_ID, products.*, prod_images.*, users.*

Und noch einer anderen Note, Ihre Abfrage wahrscheinlich zumindest ändern gibt keine products.item_id nicht, wenn prod_images keine verknüpften Datensätze hat (weil es LEFT JOIN ed), aber wenn users hat keine verknüpften Datensätze, weil es ist INNER JOIN Ed. Also würde ich anfangen, JOIN users zu LEFT JOIN users zu ändern.

PS Sehen Sie sich @Reno-Kommentar an. Das habe ich nicht erwähnt. sicher sollten Sie ändern ON products.item_id=products.item_id zu ON products.item_id=prod_images.item_id

+0

meine Abfrage gibt wie diese [item_id] => – david2000

+0

leider: das ist das Ergebnis Array ( [item_id] => \t [item_name] => HERO \t [ user_id] => 31 \t [filename] => ) – david2000

+0

Alex, wenn ich das Abfrageergebnis mit linkem Join oder Join identisch bin. Wenn es keine prod_images gibt, sind die products.item_id einfach leer, da die Join-Funktion die Zeile zusammenführt. – david2000