2013-06-28 52 views
3

我正在製作一個小型web應用程序來發送短信。我必須向用戶展示他們的最後發送的短信(如在安卓,iOS的簡訊應用程式...)SMS應用程序中的接收器獲取最後的消息 - SQL請求

我的三個表:

--------- ----------- ----------- 
| users | | sms | | indexes | 
--------- ----------- ----------- 
    id   id   id 
    ..   user_id  user_id 
       receiver  phone_n 
      created_at  name 

我已經做了一個SQL請求來獲取最後發送短信按照索引表的名稱/電話號碼分組:

SELECT S.receiver, S.message, I.name, temp.last_sent, I.id 
FROM sms S 
INNER JOIN (
    SELECT receiver, user_id, MAX(created_at) AS last_sent 
     FROM sms 
     WHERE user_id = ? 
     GROUP BY receiver, user_id 
    ) temp 
ON S.receiver = temp.receiver 
AND S.user_id = temp.user_id 
AND S.created_at = temp.last_sent 
LEFT OUTER JOIN indexes I ON S.receiver = I.phone_number WHERE I.user_id = ? 
ORDER BY temp.last_sent DESC 

此SQL請求起作用。我通過接收者名稱獲取用戶發送給它的最後一條短信。 但是我只收到SMS在接收器出現在索引表中。 沒有顯示發送給沒有保存在這個數據庫中的電話號碼的接收者的所有短信。

我知道我在我的LEFT OUTER JOIN indexes上犯了一個錯誤。但是

那麼我怎樣才能得到接收者發送的最後一條短信,按last_sent排序,保存的電話號碼還是不在索引中?

謝謝。

回答

2

移動WHERE子句到ON子句的LEFT OUTER JOIN

SELECT S.receiver, S.message, I.name, temp.last_sent, I.id 
FROM sms S 
INNER JOIN (
    SELECT receiver, user_id, MAX(created_at) AS last_sent 
     FROM sms 
     WHERE user_id = ? 
     GROUP BY receiver, user_id 
    ) temp 
ON S.receiver = temp.receiver 
AND S.user_id = temp.user_id 
AND S.created_at = temp.last_sent 
LEFT OUTER JOIN indexes I ON S.receiver = I.phone_number 
AND I.user_id = ? 
ORDER BY temp.last_sent DESC 
+0

工程就像一個魅力,謝謝你! – netvision73

+0

你的岩石@Kickstart – EpokK

相關問題