2010-04-05 47 views
1

我正在尝试创建基于对话的消息传递系统。用相同的值分组记录

我想将具有相同conversation_id的所有邮件分组,以便当我显示当前会话列表时,您只能看到来自每个会话的最新邮件。

我可以将mysql查询中的值分组吗,还是我必须在php中完成它?

回答

1

感谢您的帮助,这是我结束了。

SELECT messages.*, messages_conversations.subject 
FROM messages, messages_conversations 
WHERE messages.to_user_id = '".$userid."' 
AND messages_conversations.id = messages.conversation_id 
GROUP BY messages.conversation_id 
0

您可以将在MySQL查询什么样T这样的:

select * from table where conversation_id = id_here 

这将让所有具有conversation_id设置为id_here,然后你可以使用PHP来对阵列/组的工作记录。

+0

嗨Sarfraz,谢谢,但我需要检索的所有对话,这将都具有不同的id所以不能指定确切的ID – Ben 2010-04-05 07:36:40

+0

@Ben:那么我认为你可能需要使用GROUP BY SQL的关键字。 – Sarfraz 2010-04-05 07:57:32

+0

谢谢,是的,我现在正在这个地方得到什么地方。 SELECT消息。 *,messages_conversations.subject FROM messages,messages_conversations WHERE messages.to_user_id ='“。$ userid。”'GROUP BY messages.conversation_id – Ben 2010-04-05 08:00:21

0

它是数据库中父子关系的基本示例。 每条消息都有唯一的id,iys也应该引用convo id的父键。

然后你可以得到给定convo id的最新消息。

+0

我有一个名为messages_convos的表,它具有字段id,主题和一个表,其中包含id,convos_id (来自messages_convos的id),from_user_id,to_user_id,message_content,date_sent,message_read – Ben 2010-04-05 07:40:59

+0

准确地说,您已经正确完成了数据库设计。那么我无法理解你的问题。只需根据timsestamp或id字段(如果是自动递增)从message_convo表中选择一个给定id的消息表中的id即可。 从消息m,message_convo c中选择*,其中c.id = m.convos_id和m.convo_id =参数[0]按时间戳顺序desc limit 1排序。 – 2010-04-05 07:54:55

2
select m.convos_id, m.message_content from messages m 
      where m.id in 
      (select MAX(m1.id) from messages m1 GROUP BY m1.convos_id)