错误的收件箱邮件排序顺序?

时间:2013-02-13 22:15:47

标签: mysql

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

我认为我的查询工作正常,但我刚注意到某些消息的排序不正确!我非常确定它是由于该组返回任何消息...无论如何都在这周围?

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

已排序收件箱的最后一条消息,实际上是收件箱视图底部的最新消息!

3 个答案:

答案 0 :(得分:2)

我认为你正在寻找一个群体性的最大化:

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

如果对发件人进行排序或者是否总是将其过滤到特定的发件人,您是否期望对结果进行排序/分组并不是特别清楚?

交换

  

m.sent DESC

代表

  

m.sent ASC

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