2012-07-07 21 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