私の Web サイトにアクセスするたびに、ユーザーの個々のヒット カウンターが更新time()
され、Cookie に保存されている IP アドレスと ID に基づいて列が更新されます。したがって、データを出力する場合、基本的にそれ自体のコピーであるため、データベース呼び出しが少ない次のコードのより効率的な方法は次のとおりです。
<?
$last1Min = time()-60;
$last5Mins = time()-300;
$last1Hr = time()-6000;
$last1Dy = time()-144000;
$last1Wk = time()-1008000;
$last1Mnth = time()-30240000;
//last1Min
$sql = "SELECT COUNT(*) FROM usersonline WHERE lastOnline > $last1Min";
while($rows = mysql_fetch_array(mysql_query($sql))) {
echo "Users online in the last minute: " . $rows['COUNT(*)'] . "<br />\n";
}
//last5Mins
$sql = "SELECT COUNT(*) FROM usersonline WHERE lastOnline > $last5Mins";
while($rows = mysql_fetch_array(mysql_query($sql))) {
echo "Users online in the last 5 minutes: " . $rows['COUNT(*)'] . "<br />\n";
}
//last1Hr
$sql = "SELECT COUNT(*) FROM usersonline WHERE lastOnline > $last1Hr";
while($rows = mysql_fetch_array(mysql_query($sql))) {
echo "Users online in the last hour: " . $rows['COUNT(*)'] . "<br />\n";
}
//last1Dy
$sql = "SELECT COUNT(*) FROM usersonline WHERE lastOnline > $last1Dy";
while($rows = mysql_fetch_array(mysql_query($sql))) {
echo "Users online in the last day: " . $rows['COUNT(*)'] . "<br />\n";
}
//last1Wk
$sql = "SELECT COUNT(*) FROM usersonline WHERE lastOnline > $last1Wk";
while($rows = mysql_fetch_array(mysql_query($sql))) {
echo "Users online in the last week: " . $rows['COUNT(*)'] . "<br />\n";
}
//last1Mnth
$sql = "SELECT COUNT(*) FROM usersonline WHERE lastOnline > $last1Mnth";
while($rows = mysql_fetch_array(mysql_query($sql))) {
echo "Users online in the last month: " . $rows['COUNT(*)'] . "<br /><br />\n";
}
このデータを表示するより効率的な方法がある場合は、サイト全体でこれらの指標ごとにオンラインのユーザー数を表示するだけでなく、サイトのすべてのページのデータを記録して出力するように拡張したいと考えています。 .