2012-07-07 22 views
0

我有消息系統MYSQL,問題與得到最新答覆

MESSAGE_ID,to_id,from_id,消息

我做了一個線程消息系統的表。我有5人與1位成員交談。

當我看到成員

會員1說:嗨,成員2打招呼(我想是這樣說的最新答覆是你好)

會員1說:嗨,成員3說:嗨,成員1說歡迎(我想是這樣說的歡迎)

件2說喜(我想是這樣說的喜)現在

,我只提供的ID的這是member1中的會話ID之一。我將如何去展示場景2,其中我(會員1)已經離開了最新的回覆。

我可以很容易做到

SELECT * FROM messages WHERE to_id=$session_id ORDER BY message_id DESC LIMIT 1 

但將只顯示收到的消息。我需要顯示傳入和傳出消息的最後一個。

你會提出什麼建議? :\如果沒有有效的方法,可能會改變表格?我第一次設置郵件系統時,歡迎提供建議。

+1

我想你需要'thread_id'場。由於可能存在多個線程可供人們聊天,否則您將忽略從「消息」表中最後一行顯示的部分。 – Zagor23 2012-07-07 10:37:09

+0

同意,並且這個thread_id字段應該是非規範化的嗎?意思是把它放在一個單獨的表格中,並在需要時結合使用?或者沒有必要這樣做。 – Darius 2012-07-07 10:51:06

+0

那取決於。如果你將有一個線程標題或其他特定的線程信息,你可以把它放在一個單獨的表中。否則,只保留線程ID在一個單獨的表中,因爲你可以通過'message'表中的'thread_id'進行分組和排序。 – Zagor23 2012-07-07 12:15:39

回答

1
SELECT 
* 
FROM messages 
WHERE to_id = $session_id 
OR from_id = $session_id 
ORDER BY message_id DESC 
LIMIT 1 
1

你可能會需要使用UNION操作檢索最新收到的消息,並釘在導致最近傳出消息:

SELECT * FROM messages WHERE to_id=$session_id ORDER BY message_id DESC LIMIT 1 

UNION ALL 

SELECT * FROM messages WHERE from_id=$session_id ORDER BY message_id DESC LIMIT 1