2017-10-05 78 views
0

在Web應用程序內部開發用戶聊天。MySQL查詢顯示登錄用戶和其他用戶之間的聊天記錄

目標:顯示登錄用戶與之聊天並且在每個此類用戶附近的desc順序的用戶列表 - 最後一條消息(由該用戶或登錄用戶編寫)。

當前MySQL查詢:

SELECT id, 
     user_to, 
     user_from, 
     body, 
     msg_time 
FROM chat 
WHERE id IN (SELECT MAX(id) 
      FROM chat WHERE user_to=:id 
      OR user_from=:id 
      GROUP BY user_to,user_from) 
ORDER BY msg_time DESC 

效果很好。但!對於任何用戶A與任何用戶B的聊天,當前請求顯示2行:一個包含用戶A發送給用戶B的最近消息,以及一個用戶B發送給用戶A的最新消息。雖然我需要1行(在「行」下,我的意思是引導行數據,其中第1列是聊天發生的用戶的圖標,第2列是這兩個用戶之間的最新消息,第3列是最後一個消息的時間)。

但是,請求應顯示用戶A和用戶B過話,只顯示這一次,用戶A和B.

之間做出的最新的消息吹我的大腦了它。我想保持查詢簡短,感覺我很接近,但不能最終解決這個問題。感謝您的任何建議!

+0

嘗試添加像'和user_to> user_from'在內部查詢打破對稱 –

回答

0

你可以試試這個並更換user_id與登錄用戶ID,然後嘗試在當前

SELECT id, 
    user_to, 
    user_from, 
    body, 
    msg_time 
    FROM chat 
WHERE id IN (SELECT MAX(id) 
     FROM chat WHERE user_to=:id 
     OR user_from=:id 
GROUP BY IF (`user_from`=:user_id, `user_to`,`user_from`)) 
ORDER BY msg_time DESC