$months = Statistics::getStats(STAT_VIEW_YEAR, 2004);
foreach ($months as $month) { echo $month['visitors']; // ... }
I'm thinking of doing it like this:
<?php
class Statistics { public static function logPageView () { global $db; // $db is just a MySQL object interface
$ip = $_SERVER['REMOTE_ADDR']; $ex = STATS_SESSION_EXPIRE;
$result = $db->query("UPDATE `statistics` SET `visit_end` = NOW() AND `hits` = `hits`+1 WHERE `ip` = '$ip' AND NOW()-`visit_end` < $ex ORDER BY `visit_start` DESC LIMIT 1");
if ($db->affectedRows() !== 1) {
$db->query("INSERT INTO `statistics` (ip, visit_start, visit_end) VALUES ('$ip', NOW(), NOW())");
}
}
public static function getStats ($view = STATS_VIEW_DAY, $date)
{
global $db;
switch ($view) {
case STATS_VIEW_YEAR:
$sql = "YEAR(visit_start) = $date GROUP BY MONTH(visit_start) ORDER BY MONTH(visit_start)";
break;
// More cases
default:
return FALSE;
}
return $db->query("SELECT COUNT(DISTINCT ip) AS visitors, COUNT(*) AS visits, SUM(hits) AS hits FROM `statistics` WHERE " . $sql)->fetchArray();
}
}
?>
Is there a simpler way of approaching this?
-- Daniel Schierbeck
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php