我正在尝试找出解析我为我的网站存储的日志文件的最佳方法,因为我想为以下项目创建图表
- 过去 7 天内每天的点击次数
- 按国家代码点击
- 推荐网址的点击次数
- 浏览器点击
由于记录了每个“命中”,因此实际上返回了 xxx,000 个结果,我不确定将结果分组的最有效方法是什么。目前我正在研究以下方法:
$sql =mysql_query(sprintf("SELECT * FROM logs WHERE sub = 'www' AND code = '%s'",
mysql_real_escape_string($code)));
while ($res = mysql_fetch_array($sql)) {
// hits per country
if (isset($res['country_code'])) {$stat['cc'][$res['country_code']]++;}
// hits by referrer
if (isset($res['referrer'])) {$stat['rf'][$res['referrer']]++;}
// hits by day
if (isset($res['click_time'])) {
$date = strtotime($res['click_time']);
$date = date("d/m", $date);
$stat['dt'][$date]++;
}
}
我认为这是一种非常粗暴的做事方式,但以我有限的技能是我能做到的最好的。本质上,它只是遍历 sql 结果,将每个国家/地区代码放入自己的数组中并为其添加匹配项。它需要大量改进,但在一定程度上确实有效。
我考虑的另一种更传统的方式是多个带有分组的 sql 语句:
$query1 = "SELECT count(`country_code`) as country_num,`country_code` FROM `logs` GROUP BY `country_code`";
$result= mysql_query($query1);
$user_agent = "SELECT count(`user_agent`) as browser_num,`user_agent` FROM `logs` GROUP BY `user_agent`";
$browser= mysql_query($user_agent);
$referrer_url = "SELECT count(`referrer`) as ref_num, referrer FROM `logs` where referrer!='' GROUP BY `referrer`";
$result_ref= mysql_query($referrer_url);
$last_month= mysql_query("select count('click_time') as day_num, click_time from logs where click_time between '".$date1."' AND '".$date2."' GROUP BY DAY(click_time)");
问题是,哪一个会更快......如果两者都不是特别有效,还有什么替代方案?
干杯