【问题标题】:Wrong inbox message sort order?收件箱消息排序顺序错误?
【发布时间】:2013-02-13 22:15:46
【问题描述】:

我有一个简单的网络应用程序,允许用户互相发送消息,用户可以查看他们的收件箱来查看他们的消息。收件箱应按发件人分组,按来自该发件人的最新邮件的日期以及收件箱的阅读状态排序。

我认为我的查询工作正常,但是我刚刚注意到某些消息的顺序不正确!通过返回任何消息,我很确定这是由于该组的原因......这周围有什么问题吗?

看看这个小提琴: http://sqlfiddle.com/#!2/565c6/1

已排序收件箱的最后一条消息,实际上有最新消息,但它位于收件箱视图的底部!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我认为您正在寻找一个分组最大值:

    SELECT *
    FROM who_messages wm1
    WHERE wm1.sent = (
      SELECT MAX(sent)
      FROM who_messages wm2
      WHERE wm2.from_userid = wm1.from_userid
        AND wm2.to_userid = 41
    )
    ORDER BY wm1.is_read ASC, wm1.sent DESC;
    

    Sql Fiddle

    或者,没有相关的子查询:

    SELECT *
    FROM who_messages wm1
    JOIN (
      SELECT from_userid, MAX(sent) as sent
      FROM who_messages
      WHERE to_userid = 41
      GROUP BY from_userid
    ) wm2 ON wm1.from_userid = wm2.from_userid AND wm1.sent = wm2.sent
    ORDER BY wm1.is_read ASC, wm1.sent DESC;
    

    Sql Fiddle

    【讨论】:

      【解决方案2】:

      你的意思是这样的? http://sqlfiddle.com/#!2/565c6/20 我只是在子查询中按 ID 反向排序。

      【讨论】:

        【解决方案3】:

        不清楚您希望如何对结果进行排序/分组,应该对发件人进行排序还是总是将其过滤到特定的发件人?

        交换

        m.sent DESC

        m.sent ASC

        会将最新消息带到您小提琴结果的顶部。

        【讨论】:

          猜你喜欢
          • 2023-03-20
          • 2013-05-03
          • 2013-07-16
          • 1970-01-01
          • 2013-03-12
          • 2014-08-23
          • 1970-01-01
          • 2011-06-14
          • 1970-01-01
          相关资源
          最近更新 更多