Wie kann ich alle Feldwerte aus einer Abfrage mit verknüpften Tabellen bekommen?
Frage
Ich habe diese elementare Abfrage:
SELECT d.description, o.code FROM order_positions AS o
LEFT JOIN article_descriptions AS d ON (o.article_id = d.article_id)
WHERE o.order_id = 1
und ich bin mit MDB2
aus PEAR
es auszuführen und die Rückgabewerte lesen.
Aber irgendwie das Ergebnis Array enthält immer Felder aus der order_positions
Tabelle nur !, das heißt das Ergebnis-Array wie folgt aussieht
row[code] = 'abc123'
, während ich mag es so aussehen
row[description] = 'my description'
row[code] = 'abc123'
Ich habe bereits versucht, die folgenden:
- Vary die Reihenfolge der Felder, das heißt
code
zuerst, danndescription
. - Variieren Sie die Reihenfolge der verknüpften Tabellen.
- Gebraucht vollständige Tabellennamen anstelle von Alias-Namen.
- verwendet, um die Stelle (
SELECT FROM table1, table2 WHERE table1.id = table2.id
) "MySQL Join"
- Gebraucht Aliase mit und ohne
AS
.
Einige andere Fakten:
- Ausführen dieser Abfrage in MySQL Query Browser funktioniert gut, alle Felder zurückgegeben.
- Die
order_positions
Tabelle scheint vorzuziehen, egal was passiert. Ich immer noch nur bekommen Felder aus dieser Tabelle, wenn sie mit zusätzlichen Tabellen verknüpft.
Lösung
OK, fand ich die Ursache:
Felder mit NULL
Werte werden dem Array hinzugefügt. In meinem Testszenario description
war in der Tat null und daher war in der Anordnung nicht zur Verfügung.
Ich werde noch diese (peinlich) Frage halten, nur für den Fall, dass jemand anderes hat dieses Problem in der Zukunft.
Facepalm http://www.scienceblogs.de/ frischer-Wind / picard-facepalm-thumb-512x409.jpg
Andere Tipps
Dies sollte funktionieren:
SELECT d.description, o.code
FROM order_positions o, article_descriptions d
WHERE o.order_id = 1 AND d.article_id = o.article_id
Sind Sie sicher, dass Sie nicht mit fetchOne()
versehentlich statt fetchRow()
?
Könnten Sie Ihren PHP-Code?
Eine andere Möglichkeit besteht darin, dass in Ihrem Code Sie das Komma verpasst haben:
SELECT a b
ist die gleiche wie
SELECT a AS b