2011-01-10 14 views
1

Ich rufe einen einfachen JOIN SQL auf einer MySQL-Datenbank. Die genaue Abfrage aus dem PHP-Skript aufgerufen ist:PHP: SQL gibt leere Zellen für nicht leere Felder zurück

SELECT * 
FROM weighteventtest 
LEFT JOIN commenttest ON weighteventtest.eventid=commenttest.eventid 
ORDER BY weighteventtest.eventid DESC 

Wenn ich die SQL-Abfrage direkt in phpMyAdmin laufe, bekomme ich ein normales Ergebnis mit allen Werten gesetzt. Wenn das Skript jedoch über PHP aufgerufen wird, ist das Feld "eventid" für fast alle Zeilen leer oder null. Wenn ich die Werte jeder Zeile ausspreche, haben alle Felder einen Wert mit Ausnahme des Primärschlüssels 'eventid', der leer ist, AUSSER FÜR die Zeilen, in denen eine Übereinstimmung für die verbundene Tabelle vorhanden ist.

Irgendwelche Ideen? danke! Wird.

Antwort

3

Der Übeltäter ist SELECT * mit PHP zu kombinieren. Da gibt es zwei Ereignisfelder in der Ausgabe (eine aus jeder Tabelle), wenn Sie auf die Spalte nach Name (Eventid) zugreifen, es ist fälschlicherweise finden Sie die zweite (die NULL aus dem fehlenden rechten Datensatz).

Um das Problem zu beheben, geben Sie explizit an, welche Spalten nach SELECT ausgewählt werden sollen. Die Verwendung von SELECT * im Produktionscode wird in der Regel als schlechte Praxis angesehen.

+0

Wenn Sie mit USING (eventid) verbinden, kann es das Problem beheben. Es ist eine sauberere Syntax, wenn Sie zwei Tabellen mit demselben Schlüssel haben. –

+0

Die Syntax, die Sie verwenden, wird wahrscheinlich keine Auswirkung auf die Liste der Spalten in der Ergebnismenge haben (auch wenn die Benutzerdatenbank die Verwendung von USING unterstützt - er hat nicht angegeben, welches Produkt er verwendet). –

+0

das klingt, als könnte es mein Problem beheben ... wird Felder jetzt ändern und Sie so schnell wie möglich wissen lassen ... –