2013-10-24 58 views
0

我正在尝试构建私人邮件并收件箱。通过时间戳对组内的行进行排序

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

此代码订单每个组由时间戳,因此,如果用户1用户2后发送我的消息,用户1将是第一个就行了。但是,我遇到的问题是每个组内的消息都不按时间戳排序,所以当我需要用户发送的最新消息时,组的输出始终是用户发送的第一条消息。所以,我需要通过时间戳对组中的行进行排序,以及通过时间戳对整个组进行排序。我不能为我的生活弄清楚如何做到这一点。有人可以帮忙吗? (父母是共享两个普通用户而不管发送者/接收者,即任何两个用户之间的所有消息的集合的所有消息的公共ID)。提前致谢!

+0

为什么你需要使用group by? – skrilled

回答

1

我需要咖啡,所以我希望我能够正确地阅读你的问题,但是这不仅仅是将parent添加到order by语句的问题吗?

$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"; 

这将分裂整个事情INT两个部分 - 顶部的未读消息,以及底部的消息 - 与以前一样排列。

+0

我试过了。我只想为每个父组(每个对话)显示1条消息(最近的消息)。因此,我需要按单一最近消息显示排序的组,然后根据哪个父组具有最新消息来排序组。 – user2250471

相关问题