2016-03-26 12 views
0

ich zwei Tabellen haben:SELECT mit LEFT NULL-Werte kehrt JOIN

Beiträge:

id | id_author | content | year 
1 | 1   | hello | 2015 
2 | 1   | world | 2016 
3 | 2   | hi  | 2016 

Favoriten:

id | id_author | id_post | year 
1 | 3   | 2  | 2016 

Und ich will ein SELECT tun Holen Sie sich die posts Daten durch die favorites mit LEFT JOIN. Also, ich tat: ( unter Berücksichtigung, dass ich angemeldet bin mit dem Benutzer mit id_author = 3)

SELECT p.id, p.id_author, p.content, p.year, f.id_post 
FROM favorites f 
LEFT JOIN posts p 
ON f.id_post = p.id 
WHERE f.id_author = 3 
ORDER BY f.id 
DESC 

Also, ich tat: ($sql ist gleich die Abfrage oben)

if(count($sql) > 0) { 
    var_dump($sql); 
} 

Aber der Ausgang ist:

array(1) { 
    [0]=> 
    array(5) { 
    ["id"]=> 
    NULL 
    ["id_author"]=> 
    NULL 
    ["content"]=> 
    NULL 
    ["year"]=> 
    NULL 
    ["id_post"]=> 
    string(1) "2" 
    } 
} 

Warum NULL zurückkehrt?

Antwort

2

das Schema und die Daten des OP Bei der folgenden Abfrage ist syntaktisch nicht gültig:

SELECT p.id, p.id_author, p.content, p.year, f.id_post 
FROM favorites f 
LEFT JOIN posts p 
    ON f.id_post = p.id 
WHERE id_author = 3 
ORDER BY f.id DESC 

, da es eine Mehrdeutigkeit ist das Feld durch das Prädikat der WHERE Klausel betreffend: id_author = 3.

Sie haben die meisten wahrscheinlich p.id_author = 3, die das Feld der rechten Tabelle der LEFT JOIN Betriebseinrichtung von der WHERE-Klausel verwendet wird. Dies verwandelt die LEFT JOIN in eine INNER JOIN-Operation, die zu keinen Ergebnissen führt. Also müssen Sie wahrscheinlich verwenden:

WHERE f.id_author = 3 
+0

Es tut mir leid, und ich meine Frage bearbeitet, in der Tat gibt es keine Zweideutigkeit ist, schrieb ich nur den falschen Zustand ... Die Abfrage jetzt ist. – Igor

+0

@Igor in diesem Fall pls entfernen Sie den Beitrag. – Shadow