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 に答える