我目前正在计算检索活动用户列表的时间差异,所以:
$timeout = 300;
$time = strtotime("-{$timeout} sec");
$time_str = date("Y-m-d H:i:s", $time);
$SQL = "SELECT COUNT(*) AS users FROM active_users WHERE user_id={$user_id} AND last_time >= '{$time_str}'";
这次可以直接在MySQL查询中完成吗?如果有,是否有任何性能影响?
答案 0 :(得分:4)
SELECT ... AND last_time >= (NOW() - INTERVAL $timeout SEC)
性能影响是......未知。取决于PHP v.s.的效率。 MySQL的日期/时间操作代码是。可能会出现同样的问题,因为他们可能都使用相同的底层libc / glibc函数。
答案 1 :(得分:0)
是的,它可以直接在MySQL中完成,在某些情况下,如果您在Web服务器和MySQL服务器之间有不同的时区或者应用程序服务器和数据库服务器之间的时钟未正确同步,则可能更好。我个人的偏好是将数据库派生的时间(即时间戳)视为权威,因此会推荐MySQL方法。查询可能如下所示:
SELECT COUNT(*) AS users FROM active_users WHERE user_id={$user_id} AND last_time >= DATE_SUB(NOW(), INTERVAL {$timeout} SECONDS)