gpt4 book ai didi

php - 如何在置顶显示在线用户,在置顶显示离线用户呢?

转载 作者:行者123 更新时间:2023-11-29 04:38:34 25 4
gpt4 key购买 nike

你们能告诉我如何在顶部显示所有在线的人,然后显示所有离线的人吗,两个列表都按照用户名的升序排列,就像 Skype 一样。

我的MySQL表是Users,列如下:

ID
Username
Last_logged_in - is with unix_timestamp();

我用来显示在线人的代码如下:

select * from users where Last_logged_in >= UNIX_TIMESTAMP() - 60;

我试过的代码是这样的:

select id, username,  last_logged_in from users where last_logged_in >= UNIX_TIMESTAMP() - 60 UNION select id, username,  last_logged_in from users where  last_logged_in <= UNIX_TIMESTAMP() - 60 LIMIT 10;

一些帮助将不胜感激。

最佳答案

您的查询没有提供您期望的结果,因为 UNION does not preserve the order它合并的查询中的行数。

您需要将每个联合查询括在括号中,并在最后一个查询之后添加 ORDER BY。但是,如果您这样做,您将获得一个大而慢的查询,该查询以复杂的方式从表 users 中选择所有记录。

解决方案是按 Last_logged_in 列降序排列行。这样,首先返回最近登录的用户。您还需要在字段列表中添加表达式,以判断用户是否仍然在线。最后,因为你的查询没有过滤返回的用户,所以推荐使用LIMIT子句;否则查询将返回整个表,这可能不是您想要的。

更新

作为 comment 中指定的 OP , 用户必须按在线状态排序(在线优先),然后按用户名排序(升序)。

(更新的)查询是:

SELECT u.*, IF(Last_logged_in >= UNIX_TIMESTAMP() - 60, 1, 0) as isOnline;
FROM users u
ORDER BY isOnline DESC, username ASC
LIMIT 20

关于php - 如何在置顶显示在线用户,在置顶显示离线用户呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35178939/

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