LEFT JOIN - Result immer NULL

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hallo,

undzwar wollte ich ein Left Join einbauen. Das klappt auch alles. Bis ich den 3. Left Join einbaue

PHP:
 LEFT JOIN `products_ids` ON (products_ids.products_id = op.products_id and products_ids.attribute_id= opa.orders_products_attributes_id)

Dieser Befehl soll aus der Tabelle products_ids eine Kennung raus suchen. Leider Kommt als Ergebniss immer "NULL" obwohl in der Tabelle mehrere Treffer vorliegen (ich brauche aber nur einen davon).

Kann mir einer sagen ob ich das mit Group by lösen kann? Es muss halt aus der Tabelle was rausgesucht werden wo die Product id und attribut id übereinstimmt und
PHP:
where products_ids='Bestand'
ist.

ich komm leider nicht drauf.

Danke schonmal
 
Zuletzt bearbeitet:
Code:
and products_ids.status
:?:
Fehlt da nicht was? ;)
 
Hi resourcer,

wirklich weiterhelfen können wir Dir nur, wenn wir alle beteiligten Tabellen ( d.h. deren Aufbau ), das komplette SQL-Statement und das Soll- bzw Ist-Ergebnis kennen.

Sowohl der LEFT JOIN als auch die WHERE-Bedingung erscheinen mir unvollständig.

Gruß
transversalis
 
Code:
and products_ids.status
:?:
Fehlt da nicht was? ;)

sorry das sollte nicht im 1. Post.
Habs geändert.

Hier die kompl SQL

SELECT products_ids.lagerplatz, op.products_name, orders.orders_id as `id`, products.products_ean as `ean`, op.products_quantity as `stk` from `orders`
LEFT JOIN `orders_products` as op ON (orders.orders_id =op.orders_id)
LEFT JOIN `orders_products_attributes` as opa ON (op.orders_products_id =opa.orders_products_id)
LEFT JOIN `products` ON (products.products_id=op.products_id)
LEFT JOIN `products_ids` ON (products_ids.products_id = op.products_id and products_ids.attribute_id= opa.orders_products_attributes_id)
where orders_status=12
und aus der Tabell products_ids.lagerplatz muss ich den lagerplatz haben. Das Problem ist halt das der Artikel öffters in der DB vorhanden ist, aber ich brauch nur 1 Lagerplatz.

wenn ich
select lagerplatz from `products_ids` where attribute_id=12211 and products_id=12
suche kommen 3 Treffer. Und das ist das Problem. Wenn ich das auf 1 Treffer limitieren kann passt es
 
Zuletzt bearbeitet:
[...] kommen 3 Treffer. Und das ist das Problem. Wenn ich das auf 1 Treffer limitieren kann passt es
Was sollte das denn damit zu tun habe, wenn in der Gesamtabfrage nur "NULL" kommt?
Wenn du eine Zeile links auf drei Zeilen rechts joinst, bekommst du eben drei Ergebniszeilen insgesamt, aber doch nicht "null"...
Das auf ein Lager zu begrenzen wäre mittels "group by" auch kein Thema, aber ich kann mir nicht vorstellen, dass das tatsächlich mit deinem Problem zusammenhängt...

Code:
SELECT max(products_ids.lagerplatz), op.products_name, orders.orders_id as `id`, products.products_ean as `ean`, op.products_quantity as `stk` from `orders`
LEFT JOIN `orders_products` as op ON (orders.orders_id =op.orders_id)
LEFT JOIN `orders_products_attributes` as opa ON (op.orders_products_id =opa.orders_products_id)
LEFT JOIN `products` ON (products.products_id=op.products_id)
LEFT JOIN `products_ids` ON (products_ids.products_id = op.products_id and products_ids.attribute_id= opa.orders_products_attributes_id)
where orders_status=12 group by op.products_name, orders.orders_id, products.products_ean, op.products_quantity

Was mir in der Abfrage noch fehlt, wäre ein Präfix beim orders_status, aber auch das sollte keine Rolle spielen...
 
Habe dein Code getestet. Aber die Spalte Lagerplatz ist noch immer leer.

Anbei mal ein Bils vom Result. Dort steht immer Lagerplatz "Null"

orders_status sucht alle Orders raus die relevant sind.

Er prüft in der order wer den status 12 hat
dann sucht er alle artikel raus die in den Bestellungen vorhanden sind
und jetzt möchte ich gerne den Lagerplatz ausgeben und dieser kann anhand von
attribut_id und products_id und status='Bestand' raus gefunden werden.

Hoffe das hilft etwas
 

Anhänge

  • fehler.jpg
    fehler.jpg
    265 KB · Aufrufe: 14
Das ist doch schon mal eine Aussage... Es ist also nicht "alles NULL", sonden nur der Wert in der Spalte Lagerplatz...
Und das kann bei einem left join eigentlich nur daran liegen, dass eben in der gejointen Tabelle keine Einträge vorhanden sind, die auf die Join-Kriterien passen...
Der Ursache kannst du dann eigentlich nur auf die Spur kommen, indem du die Abfrage ohne den letzten Join ausführst, und dann nochmal die Kriterien für diesen Join überprüfst.
Die Datentypen sind auch identisch (von products_ids.products_id und op.products_id sowie von products_ids.attribute_id und opa.orders_products_attributes_id)?