0

我目前计算检索活跃用户列表的时间差,因此:

$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 查询中完成吗?如果是这样,对性能有影响吗?

4

2 回答 2

4
SELECT ... AND last_time >= (NOW() - INTERVAL $timeout SEC)

性能影响是……未知的。取决于 PHP 与 MySQL 的日期/时间操作代码的效率。可能结果差不多,因为无论如何它们都可能使用相同的底层 libc/glibc 函数。

于 2013-01-14T20:21:31.353 回答
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)
于 2013-01-14T20:22:56.087 回答