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已經幫助了我非常,我真的很感謝所有的幫助。
謝謝你的回覆,這個查詢沒有工作,它只是向我展示了獨特的senderid與他們最新的消息,我的目標是要加載的所有消息爲每個發件人到收件人分成線程 – 2013-04-08 17:02:29
哦!現在我已經有了你的初步想法! '選擇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
那麼做到了!工作很好,非常感謝你,任何機會,你可以給我一個關於查詢如何工作的快速解釋,我會一直盯着它,直到我可以消化它,但它很高興有一個快速的想法,你想出了它。再次感謝您,我真的很感激您花時間回答! – 2013-04-08 17:41:30