我的 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/0
与 NOW() - 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/