我正在尝试为私人消息构建和收件箱。
$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,无论发送者/接收者如何,即任何两个用户之间的所有消息的集合)。提前谢谢!
答案 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";
这会将整个事情分成两部分 - 顶部的未读消息和底部的消息 - 使用与之前相同的其他顺序。