gpt4 book ai didi

php - 按时间戳对组内的行进行排序

转载 作者:行者123 更新时间:2023-11-29 13:30:09 24 4
gpt4 key购买 nike

我正在尝试构建私有(private)消息和收件箱。

$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 是共享两个公共(public)用户的所有消息的公共(public) ID,无论发送者/接收者如何,即任意两个用户之间的所有消息的集合)。提前致谢!

最佳答案

我需要咖啡,所以我希望我正确地阅读了您的问题,但这不就是将 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";

这会将整个内容分为两部分 - 未读消息位于顶部,已读消息位于底部 - 与之前的其他顺序相同。

关于php - 按时间戳对组内的行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19578620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com