【发布时间】:2012-06-12 02:16:39
【问题描述】:
我在这里扩展我之前的问题。
Private chat system MYSQL query ORDERBY and GROUPBY
此外,我还创建了一个名为 users 的表,我将从中获取用户信息。
消息表
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
现在我想要的结果是
如果 jack(id:102) 回复 mark(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 字段将显示 mark 和 jack 之间的最后一条消息 created_time 字段将显示消息创建时间 名称字段将显示杰克正在向其发送或接收消息的人的姓名。
我认为我们需要修改/拆分表,但不知道如何以及使用什么查询来完成这项任务。
【问题讨论】:
-
我在你的表中没有看到
message D -
@Jadzia 这是群消息系统吗?
-
如果
jack回复markmessage D的发件人应该是jack我猜? -
@Jack D R 说的是正确的。如果 jack 正在回复,那么消息 D 将是 jack。
-
DR 如果您在 badoo.com 和 tagged.com 等网站上看到聊天系统。他们正在使用我正在尝试做的聊天系统。