我的MYSQL表具有以下结构:
+------+----------+-----+-----------+----------------+----------+
| uuid | username | ... | clan_rank | user_is_online | last_act |
+------+----------+-----+-----------+----------------+----------+
当用户在网站上时,我会执行更新last_act
字段的ajax请求,并每隔30秒在表中将user_is_online
设置为true。使用本地计算机我可以启用在user_is_online
时将NOW() - last_act > 30
更改为false的事件。这用于打印所有符合其状态的朋友。但是,我还需要按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
上面的查询将首先打印所有在线用户并按其部落排名进行排序,然后打印所有具有相同订单的离线用户。
但不幸的是,在我的托管中,我无法将user_is_online = 1/0
设置为ON状态,这就是我遇到按所需顺序打印用户的问题。
我的想法是我应该在查询中用NOW() - c_last_act < 30
替换{{1}},但这是一个很好的解决方案吗?也许有更高效的?
答案 0 :(得分:1)
请注意,您可以通过将WHERE用作ORDER本身在单个查询中执行此操作;它将过滤掉所有在线的并继续使用离线的那些:
SELECT * FROM users ORDER BY ('.time().' - c_last_act < 30) DESC, clan_rank DESC
答案 1 :(得分:0)
好的,所以将我当前的查询更改为
'SELECT * FROM users WHERE ('.time().' - c_last_act <= 30) ORDER BY clan_rank DESC'
'SELECT * FROM users WHERE ('.time().' - c_last_act > 30) ORDER BY clan_rank DESC'
做了我想要的。
此外,我注意到在PHP查询中使用NOW()
给了我一些奇怪的结果,因为服务器时间没有设置为GMT。