次の項目のグラフを作成したいので、Web サイト用に保存したログ ファイルを解析する最善の方法を見つけようとしています。
- 過去 7 日間の 1 日あたりのヒット数
- 国コード別のヒット数
- 参照 URL によるヒット数
- ブラウザ別ヒット数
すべての「ヒット」がログに記録されるため、文字通り 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)");
問題は、どちらがより速いかということです....どちらも特に効率的でない場合、どのような代替手段がありますか?
乾杯