2013-03-28 69 views
0

我試圖運行以下查詢,並且不斷收到語法錯誤。查詢工作正常,沒有LEFT JOIN。我怎樣才能無誤地實現LEFT JOIN?如何左連接表基於從同一查詢的內部接收的值

SELECT 
    m.mid, 
    m.seq, 
    m.created_on, 
    m.created_by, 
    m.body, 
    r.status, 
    u.username_clean 
FROM message_recipient r 
INNER JOIN message m 
ON m.mid = r.mid AND m.seq = r.seq 
WHERE r.uid = ".$logged_in_id." 
AND r.status in ('A', 'N') 
AND r.seq = (
      SELECT 
       MAX(rr.seq) 
      FROM message_recipient rr 
      WHERE rr.mid = m.mid 
      AND rr.status in ('A', 'N') 
      ) 
AND IF (m.seq=1 and m.created_by = ".$logged_in_id." , 1=0, 1=1) 
ORDER BY created_on DESC 
LEFT JOIN users u 
ON u.user_id = m.created_by 

回答

2

LEFT JOIN是在錯誤的地方。所有的加入需要是WHERE句之前:

SELECT 
    m.mid, 
    m.seq, 
    m.created_on, 
    m.created_by, 
    m.body, 
    r.status, 
    u.username_clean 
FROM message_recipient r 
INNER JOIN message m 
    ON m.mid = r.mid AND m.seq = r.seq 
LEFT JOIN users u 
    ON u.user_id = m.created_by 
WHERE r.uid = ".$logged_in_id." 
    AND r.status in ('A', 'N') 
    AND r.seq = (
       SELECT 
        MAX(rr.seq) 
       FROM message_recipient rr 
       WHERE rr.mid = m.mid 
       AND rr.status in ('A', 'N') 
      ) 
    AND IF (m.seq=1 and m.created_by = ".$logged_in_id." , 1=0, 1=1) 
ORDER BY created_on DESC 

的SQL子句去按以下順序:

SELECT 
FROM 
JOIN 
WHERE 
GROUP BY 
ORDER BY 

即使你有多個加入,他們將之前的WHERE

所有出現
+0

完美工作,感謝您的額外信息。我很感激。謝謝。 – Aayush

+0

@Aayush歡迎您! :) – Taryn