2013-10-24 92 views
0

我正在嘗試構建私人郵件並收件箱。通過時間戳對組內的行進行排序

$sqlInbox = " 
    SELECT sender, receiver, message, parent, rView 
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    GROUP BY parent 
    ORDER BY timestamp DESC"; 

此代碼訂單每個組由時間戳,因此,如果用戶1用戶2後發送我的消息,用戶1將是第一個就行了。但是,我遇到的問題是每個組內的消息都不按時間戳排序,所以當我需要用戶發送的最新消息時,組的輸出始終是用戶發送的第一條消息。所以,我需要通過時間戳對組中的行進行排序,以及通過時間戳對整個組進行排序。我不能爲我的生活弄清楚如何做到這一點。有人可以幫忙嗎? (父母是共享兩個普通用戶而不管發送者/接收者,即任何兩個用戶之間的所有消息的集合的所有消息的公共ID)。提前致謝!

+0

爲什麼你需要使用group by? – skrilled

回答

1

我需要咖啡,所以我希望我能夠正確地閱讀你的問題,但是這不僅僅是將parent添加到order by語句的問題嗎?

$sqlInbox = " 
    SELECT sender, receiver, message, parent, rView 
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    GROUP BY parent 
    ORDER BY parent, timestamp DESC"; 

而關於這一點,你不使用任何聚合函數,所以你可能甚至都不需要由組(除非你正在做別的事情不是你發佈的代碼:

$sqlInbox = " 
    SELECT sender, receiver, message, parent, rView 
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    ORDER BY parent, timestamp DESC"; 

最後,如果是我自己的代碼,我會考慮增加一個讀/未讀標誌的消息,並使用額外的ORDER BY子句:

$sqlInbox = " 
    SELECT sender, receiver, message, parent, rView 
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    ORDER BY readStatus, parent, timestamp DESC"; 

這將分裂整個事情INT兩個部分 - 頂部的未讀消息,以及底部的消息 - 與以前一樣排列。

+0

我試過了。我只想爲每個父組(每個對話)顯示1條消息(最近的消息)。因此,我需要按單一最近消息顯示排序的組,然後根據哪個父組具有最新消息來排序組。 – user2250471

相關問題