我有一张名为Messages的表格,它的格式如下图所示:
这张表储存了人与人之间发送的所有消息,但我需要像Facebook的消息系统那样进行设置。
为此,我的查询应该是这样的:
SELECT * FROM Messages WHERE To_User = x OR From_User = x ORDER BY Time DESC
这将获取到我和x用户之间收发的所有消息,并按时间顺序排序,最新的消息最先出现。
然而,Facebook的系统像一个论坛一样进行排序,因此在任何给定的查询结果中,我只想要涉及到y用户的一条消息。所以我不想看到这种情况发生:
To_User: 6 From_User: 7 Status: I agree with your message Time: 12345
To_User: 7 To_User: 6 Status: Do you agree with my message? Time: 12344
比方说我正在为用户6展示消息页面,使用当前系统会展示两条消息。相反,只有顶部的那个应该被选择,因为我只想显示用户6和7之间最新的消息,而不是每一个消息。
通常来说,这通常只需要一个LIMIT语句就可以解决,但我需要能够获取大量的消息,但唯一的规则是:
1.它必须是来自或发往用户X 2.不得选择来自或发往用户Y的两条消息 3.所选的消息必须是用户X和Y之间的最新消息
这很难描述,但我希望我已经描述得足够详细了,以便得到解决方案。
我已经考虑过使用GROUP BY,但我无法让它考虑到需要找到来自或发往我的消息而不只是仅限于发件人或收件人的情况。
如果问题没有描述得足够详细,请在下投票之前告诉我,我会尽力描述得更清楚。
这张表储存了人与人之间发送的所有消息,但我需要像Facebook的消息系统那样进行设置。
为此,我的查询应该是这样的:
SELECT * FROM Messages WHERE To_User = x OR From_User = x ORDER BY Time DESC
这将获取到我和x用户之间收发的所有消息,并按时间顺序排序,最新的消息最先出现。
然而,Facebook的系统像一个论坛一样进行排序,因此在任何给定的查询结果中,我只想要涉及到y用户的一条消息。所以我不想看到这种情况发生:
To_User: 6 From_User: 7 Status: I agree with your message Time: 12345
To_User: 7 To_User: 6 Status: Do you agree with my message? Time: 12344
比方说我正在为用户6展示消息页面,使用当前系统会展示两条消息。相反,只有顶部的那个应该被选择,因为我只想显示用户6和7之间最新的消息,而不是每一个消息。
通常来说,这通常只需要一个LIMIT语句就可以解决,但我需要能够获取大量的消息,但唯一的规则是:
1.它必须是来自或发往用户X 2.不得选择来自或发往用户Y的两条消息 3.所选的消息必须是用户X和Y之间的最新消息
这很难描述,但我希望我已经描述得足够详细了,以便得到解决方案。
我已经考虑过使用GROUP BY,但我无法让它考虑到需要找到来自或发往我的消息而不只是仅限于发件人或收件人的情况。
如果问题没有描述得足够详细,请在下投票之前告诉我,我会尽力描述得更清楚。
"给Jane Doe" "你好"
"来自John Doe" "你的留言很有趣"
"给John Doe" "我发出的信息"
然而,我不想展示除我和John Doe之外的其他信息,但由于我在查看表格中的两个不同列(From和To)以确定我和John Doe是否相关,因此我认为普通的GROUP BY语句行不通。
现在,如果另外还有Bob Joe给我发了一条消息,它可能会像这样:
"来自Bob Joe" "你好"
"给Jane Doe" "你好"
"来自John Doe" "你的留言很有趣"