php - 在不使用事件的情况下按顺序排序

标签 php mysql

我的 MYSQL 表结构如下:

+------+----------+-----+-----------+----------------+----------+
| uuid | username | ... | clan_rank | user_is_online | last_act |
+------+----------+-----+-----------+----------------+----------+

当用户访问网站时,我执行更新 last_act 的 ajax 请求字段和集合 user_is_online每 30 秒在表中变为 true。使用本地机器我可以启用将更改的事件 user_is_online每当 NOW() - last_act > 30 时为假.这用于根据他们的状态打印所有 friend 。但是我还需要通过他们的 clan_rank 来订购用户内部按 user_is_online 排序.使用事件,可以通过以下查询轻松实现:

'SELECT * FROM users WHERE user_is_online = 1 ORDER BY clan_rank DESC'

'SELECT * FROM users WHERE user_is_online = 0 ORDER BY clan_rank DESC'

上面的查询将首先打印所有在线用户并按他们的战队排名排序,然后打印所有离线用户,顺序相同。

但不幸的是,在我的主机上我无法设置 Event scheduler status到 ON 状态,这就是我遇到按所需顺序打印用户的问题。

我的想法是我应该替换 user_is_online = 1/0NOW() - c_last_act < 30在我的查询中,但这是一个好的解决方案吗?也许还有更高效的方法?

最佳答案

请注意,您可以通过使用 WHERE 作为 ORDER 本身在单个查询中执行此操作;它将过滤到所有在线的顶部,并继续显示离线的:

SELECT * FROM users ORDER BY ('.time().' - c_last_act < 30) DESC, clan_rank DESC

关于php - 在不使用事件的情况下按顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719079/

相关文章:

php - 将字符串转换为整数时不一致,当字符串为十六进制时,前缀为 '0x'

php - 多个 MySQL 语句

php - PHP 中的表单未在 <li> 下发布值

php - 在关注者和关注者关系表上获取共同好友

php - 从 mysql_* 转换为 mysqli 抛出 "Can' t 连接到 'host_name' 上的 MySQL 服务器“

MySQL JOIN 与 3 个表和 COUNT() 不工作

sql - 当自增 ID 溢出时 MySQL 会做什么?

mysql - 未定义列的Where子句

java - PHP JSON 到 Java 由于不可见字符而无法解析

php - fatal error : Call to a member function prepare() on a non-object in