2011-09-18 117 views
0

我正嘗試通過將用戶發送消息的用戶的對話分組來建立用戶的消息收件箱。訂購用戶消息SQL

所以我想要一個用戶列表,但我希望列表中的第一個用戶成爲發送最近消息的用戶。

message表有以下字段:id, sender_id, receiver_id, text

和下面的查詢給我的名單,我需要但在下降消息ID的順序不排序。

SELECT sender_id AS messgr_id FROM messages WHERE receiver_id = '$sess_id' 
UNION 
SELECT receiver_id AS messgr_id FROM messages WHERE sender_id = '$sess_id' 

我希望有一種方法可以在SQL中排序結果,而不必使用可能較慢的php進程。

謝謝!

+0

日期/時間字段在哪裏? –

回答

1

假設id是標識列(具體而言,您希望它是auto incrementing),那麼較大的ID表示記錄更近。在這種情況下,您可以按ID降序排列,以便先獲取較新的消息。像這樣(未經):

SELECT id, 
     CASE WHEN receiver_id = '$sess_id' THEN sender_id 
      ELSE receiver_id END AS messgr_id 
FROM messages 
WHERE receiver_id = '$sess_id' 
OR sender_id = '$sess_id' 
ORDER BY id DESC 
+0

當沒有日期/時間字段時,這是唯一可能的解決方案。 –

+0

這不起作用......這個想法是有一個唯一的用戶列表,這將給出一個唯一的消息列表... – algorithmicCoder

+0

然後你可以做的是改變'SELECT ID'到'SELECT MAX(id)'和將group by子句添加到「GROUP BY messgr_id」。 – krock

0

就像宙斯說,你爲什麼不能有對消息的日期時間戳?

沒有日期時間戳的郵件系統不是郵件系統。

日期時間戳是自然表示整理您的郵件。

+0

這有何幫助?日期時間戳屬於每條消息...我將用戶分組爲NOT消息...即,對一組消息進行分組......一個id字段基本上在相同的wya時間內跟蹤順序...... – algorithmicCoder