2013-09-25 174 views
0

好吧,所以我卡住試圖弄清楚我的用戶收件箱的解決方案。收件箱SQL查詢解決方案

基本上,當用戶查看他們的收件箱時,我希望它顯示每個已發送消息的用戶的最後一條消息。例如,如果John發送簡「消息1」,「消息2」,「消息3」。 Jane會在她的收件箱中看到最後一條消息「message 3」。我的意圖是,當她點擊消息時,她會看到整個線程(我已經擺脫了這個線程),實際上我已經部分有這個工作,但是有一個問題。如果約翰接着發送消息Sarah「消息1」,「消息2」,「消息3」這個查詢將對Sarah起作用,但是將不再適用於Jane。

我似乎無法弄清楚。我迄今。任何建議將非常感激。

SELECT t1.*, u.username as from_username, u.user_type as from_usertype, 
    p.profile_picture 
FROM messages t1 
JOIN (
    SELECT from_id, MAX(date) date 
    FROM messages 
    GROUP BY from_id 
) t2 ON t1.from_id = t2.from_id AND t1.date = t2.date 
LEFT JOIN users u ON u.id = t1.from_id 
LEFT JOIN profiles p ON p.user_id = t1.from_id 
WHERE t1.to_id = '{$loggeduser}' 
    AND t1.deleted = '0' 
LIMIT {$pagination->items_per_page} 
OFFSET {$pagination->offset} 

回答

0
SELECT m.*, 
     u.username as from_username, u.user_type as from_usertype, 
     p.profile_picture 
FROM (
     SELECT DISTINCT 
       from_id 
     FROM messages 
     WHERE to_id = $loggeduser 
       AND deleted = 0 
     ) md 
JOIN messages m 
ON  m.id = 
     (
     SELECT id 
     FROM messages mi 
     WHERE mi.to_id = $loggeduser 
       AND mi.from_id = md.from_id 
       AND mi.deleted = 0 
     ORDER BY 
       mi.to_id DESC, mi.from_id DESC, mi.date DESC, mi.id DESC 
     LIMIT 1 
     ) 
JOIN users u 
ON  u.id = md.from_id 
JOIN profiles p 
ON  p.user_id = md.from_id 
+0

你是聰明的人。完美的作品。 – user1715025