2012-06-08 47 views
2

这里我正在扩展我的上一个问题。私人聊天系统MYSQL查询显示发件人/收件人的最后一条消息

Private chat system MYSQL query ORDERBY and GROUPBY

另外,我创建了一个多个表称为从那里我会得到用户信息的用户。

信息表

message_id|sender_id||receiver_id|message_text| created_time 
    1   101   102  Message A 2012-06-07 08:07:18 
    2   101   102  Message B 2012-06-07 08:10:20 
    3   103   102  Message C 2012-06-07 08:12:43 

用户表:

id | name 
101 bob 
102 jack 
103 mark 

现在终于我能得到以下结果:

 name|message_text | created_time 
     mark message C 2012-06-07 08:12:43 
     bob message B 2012-06-07 08:10:20 

通过使用此查询:

SELECT * FROM messages,users 
WHERE messages.receiver_id = 102 
AND messages.sender_id=users.id 
AND messages.created_time IN 
(SELECT MAX(created_time) 
FROM messages 
GROUP BY sender_id) 
ORDER BY messages.created_time DESC 

现在我想在我的结果是

如果插孔(ID:102)回复标记(ID:103),那么我怎么能得到这个输出:

 name|message_text | created_time 
     mark message D 2012-06-07 08:12:48 
     bob message B 2012-06-07 08:10:20 

注:此处“消息D“并且时间戳是他为了标记而返回的。

其中MESSAGE_TEXT字段将显示标志和插孔 CREATED_TIME场之间的最后的消息会显示消息创建时间和 名称字段将显示的人的名字向谁插孔发送或接收消息。

我想我们需要修改/拆分表,但不知道如何以及什么查询将执行此任务。

+0

我在您的表格中看不到'message D' –

+0

@Jadzia这是一个群组消息系统吗? – Darshana

+1

如果'jack'回复'mark'发信人的'message D'应该是'jack'我猜? – Darshana

回答

0

你要求的基本上是按线程而不是发件人。线程可以在两个人之间发起,不管是发送者还是接收者。

要做到这一点,我将建议改变类似于你的数据结构是什么一直在这里讨论:Is there a simpler way to achieve this style of user messaging?

+0

Yess!我正在寻找这样的东西。让我试试吧.. :) – Jadzia

+0

所有权利杰克,所以我创建了所有表格,如你所说。现在什么查询会给我我想要的结果? – Jadzia

+0

@Jadzia该线程充满了查询,应该给你一个如何解决它的想法。 –

0

如果这是一个群聊不限制到receiver_id像messages.receiver_id = 102

SELECT users.name, 
     temp.MESSAGE_TEXT, 
     temp.created_time 
FROM 
    (SELECT sender_id, MESSAGE_TEXT, created_time 
    FROM messages 
    WHERE created_time IN 
     (SELECT MAX(created_time) 
     FROM messages 
     GROUP BY sender_id)) AS temp 
LEFT JOIN users ON temp.sender_id = users.id; 

秀每个发件人发送的最后一条消息

+0

D R再次感谢您的回复。但是这仅限于receiver_id。如果你可以看看杰克在说什么。这我想但仍然是问题在那里。 – Jadzia

+0

其实我查看的查询将是所有消息的摘要页面。如果你想我可以为你做一个演示图形... – Jadzia

+0

是的,你最好更新你的问题。有人会回答。抱歉!我现在有点忙.. – Darshana