2013-04-08 83 views
0

我一直在用這個拉我的頭髮,我有一個網站的消息系統,用戶可以互相發送信息,現在收件箱會顯示一個消息列表(像舊的學校短信),但我想讓它更現代化,給它更像Facebook的感覺。 表是非常基本的現在MYSQL GROUP and ORDER for messaging system

id senderid recipientid dateadded message 
-------------------------------------------------------------------- 
1 1    2  2013-04-01 hello1 
2 3    2  2013-04-02 hello2 
3 1    2  2013-04-03 hello3 
4 3    2  2013-04-04 hello4 
5 3    2  2013-04-05 hello5 
6 4    2  2013-04-06 hello6 

,什麼我在與加載的信息,通過與來自該發件人的郵件的最新dateadded的senderid將它們分組很難下令最舊到最新

所以想以上表格加載這樣

id senderid recipientid dateadded message 
-------------------------------------------------------------------- 
5 3    2  2013-04-05 hello5 
4 3    2  2013-04-04 hello4 
2 3    2  2013-04-02 hello2 
3 1    2  2013-04-03 hello2 
1 1    2  2013-04-01 hello1 
6 4    2  2013-04-01 hello1 

與最新的消息第一等的senderid。

這裏我只是使用基於其他類似職位查詢

SELECT m.* 
FROM messages m 
INNER JOIN (
SELECT senderid, recipientid, dateadded 
FROM messages 
WHERE recipientid = :user_id 
GROUP BY senderid 
ORDER BY dateadded DESC 
) senders ON m.senderid = senders.senderid 
ORDER BY senders.dateadded DESC 

不幸的查詢是行不通的,只組senderid的

同樣的目標,這裏是加載發送的所有郵件到登錄的用戶,但命令由senderid和最新dateadded爲消息

謝謝你的任何意見,Stackoverflow已經幫助了我非常,我真的很感謝所有的幫助。

回答

0

這個怎麼樣?

SELECT senderid, recipientid, MAX(dateadded) AS MAX_dateadded 
FROM messages 
WHERE recipientid = :user_id 
GROUP BY senderid 
ORDER BY MAX_dateadded DESC 
+0

謝謝你的回覆,這個查詢沒有工作,它只是向我展示了獨特的senderid與他們最新的消息,我的目標是要加載的所有消息爲每個發件人到收件人分成線程 – 2013-04-08 17:02:29

+0

哦!現在我已經有了你的初步想法! '選擇M * FROM消息米 INNER JOIN( SELECT senderid,recipientid,MAX(dateadded)AS MAX_dateadded FROM消息 WHERE recipientid =:user_id說明 GROUP BY senderid ORDER BY MAX_dateadded DESC )。發件人ON m.senderid = senders.senderid ORDER BY senders.MAX_dateadded DESC,m.senderid,m.dateadded DESC' – 2013-04-08 17:25:15

+0

那麼做到了!工作很好,非常感謝你,任何機會,你可以給我一個關於查詢如何工作的快速解釋,我會一直盯着它,直到我可以消化它,但它很高興有一個快速的想法,你想出了它。再次感謝您,我真的很感激您花時間回答! – 2013-04-08 17:41:30