按时间戳排序组内的行

时间:2013-10-24 23:36:08

标签: php mysql sql

我正在尝试为私人消息构建和收件箱。

$sqlInbox = "
    SELECT sender, receiver, message, parent, rView
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    GROUP BY parent 
    ORDER BY timestamp DESC";

此代码按时间戳对每个组进行排序,因此如果user1在user2之后向我发送消息,则user1将首先出现在列表中。但是,我遇到的问题是每个组内的消息都没有按时间戳排序,因此当我需要它作为用户发送的最新消息时,组的输出始终是用户发送的第一条消息。因此,我需要按时间戳对组内的行进行排序,以及按时间戳对整个组进行排序。我不能为我的生活弄清楚如何做到这一点。有人可以帮忙吗? (parent是共享两个普通用户的所有消息的公共ID,无论发送者/接收者如何,即任何两个用户之间的所有消息的集合)。提前谢谢!

1 个答案:

答案 0 :(得分:1)

我需要咖啡,所以我希望我正确地阅读你的问题,但这不仅仅是将parent添加到订单中吗?

$sqlInbox = "
    SELECT sender, receiver, message, parent, rView
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    GROUP BY parent 
    ORDER BY parent, timestamp DESC";

在那个注释中,你没有使用任何聚合函数,所以你甚至可能根本不需要该组(除非你在你发布的代码中没有做其他事情:

$sqlInbox = "
    SELECT sender, receiver, message, parent, rView
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    ORDER BY parent, timestamp DESC";

最后,如果它是我自己的代码,我会考虑在消息中添加读/未读标志,并在order by子句中另外使用:

$sqlInbox = "
    SELECT sender, receiver, message, parent, rView
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    ORDER BY readStatus, parent, timestamp DESC";

这会将整个事情分成两部分 - 顶部的未读消息和底部的消息 - 使用与之前相同的其他顺序。