基本: 訪問者をカウントするスクリプトがあります。一部の有用な情報は MySQL データベースに保存されます。1年以上経った今、180,000を超えるデータレコードがあり、実際の訪問者を読み取るスクリプトは非常に遅い.
訪問者をカウントし、同じ訪問者か新しい訪問者かをチェックするこのスクリプトがあります。そのために、私は 3 時間の時間範囲を持っており、この範囲の後でのみ、訪問は別の時間をカウントします。
脚本:
$besucher_query = mysql_query('SELECT `time`, `agent` FROM `besucher` ORDER BY `ip` ASC');
while($besucher = mysql_fetch_array($besucher_query)) {
$newtime = $besucher['time'];
$newagent = $besucher['agent'];
$limit = 3 /*std*/ * 60 /*min*/ * 60 /*sek*/; // three hours before same visitor counts again
$diff = $newtime - $limit;
if($oldtime <= $diff or ($oldtime > $diff and $newagent != $oldagent))
$besucherzahl++;
$oldtime = $besucher['time'];
$oldagent = $besucher['agent'];
}
$anzahl_besucher = $besucherzahl;
echo $anzahl_besucher;
私は数年前にこのスクリプトを作成しましたが、これが最も醜い方法であることはわかっています。時刻は UNIX タイムスタンプ形式で保存されます。
ここで私の質問: 上記の条件 (3 時間ルール) でこれを MySQL で直接「グループ化」するにはどうすればよいですか?