与用户分组和订购对话消息

时间:2014-03-26 20:28:59

标签: mysql sql

这个标题很糟糕,但却无法想到更好的标题。这是特定于Twitter的,但可以应用于您进行私人谈话的任何类似应用程序。

我想显示用户可能拥有的所有直接消息。来自/到特定用户的所有消息应该组合在一起。

这是一个SQL Fiddle示例。

在此示例中,我收到了来自两个用户的消息,并回复了一个(输入/输出类型)。第一个查询只是按日期降序排序。订单是3 2 1,但我真正想要的是3 1 2因为3它是最新的,1与3相关。

第二个查询获取正确的顺序,但使用GROUP_CONCAT。这使得查询非常混乱,我宁愿在每一行中都有一条消息,所以我不必在PHP中拆分它们。

添加了第三个查询,因为我还不确定是否要订购每个会话ASC或DESC。这个正确地执行GROUP_CONCAT ASC,但是因为来自user2的消息比来自user1的第一条消息更新,所以这两行是相反的。

希望这是有道理的。我想要实现的两个命令是3 1 2和1 3 2,每个消息作为自己的行,以及两个不同的查询。谢谢!

1 个答案:

答案 0 :(得分:0)

你在找这个吗?

SELECT *
FROM   test
ORDER BY "user", date DESC;

编辑:

您希望在最近的消息发布之前订购用户。这需要类似join

的内容
select t.*
from test t join
     (select user, max(date) as maxdate
      from test
      group by user
     ) tu
     on t.user = tu.user
order by tu.maxdate desc, user, date desc;