1

現在、サーバー上に作成されたツールのアクセスログがあります。ツールの有効期限はありませんが、すべて異なる時間に作成されます(製品のように)。ID、さまざまなデータフィールド、および作成時のタイムスタンプがあります。

私が必要としているのは、アクセスログエントリを時間に応じてx間隔にグループ化してカウントすることです。今、私は10ステップ(間隔)をいじっています。この10の間隔でアクセスエントリをカウントしたいので、時間に応じて使用状況を参照することができます。固定の時間間隔を使用していません。間隔は(現在の時間-追加された時間)/10です。

これが私の出力目標です。

From: 1351159089
Now: 1353932533

From           To               Entries
1351159089   - 1351436433.4  =  2
1351436433.4 - 1351713777.8  =  1
1351713777.8 - 1351991122.2  =  0
1351991122.2 - 1352268466.6  =  2
1352268466.6 - 1352545811    =  5
1352545811   - 1352823155.4  =  0
1352823155.4 - 1353100499.8  =  2
1353100499.8 - 1353377844.2  =  0
1353377844.2 - 1353655188.6  =  2
1353655188.6 - 1353932533    =  3

私が今していることは、PHPと複数のクエリを使用することです。

$from = strtotime($timeCreated);
$now = time();
$dif = $now-$from;

$steps = $dif/10;

for($i=0; $i <= 9; $i++) {
    $intervalFrom = $from+($steps*$i);
    $intervalTo = $intervalFrom+$steps;
    $get = mysql_fetch_assoc(mysql_query('SELECT count(id) as `total` FROM `access_log` WHERE `time` >= FROM_UNIXTIME('.$intervalFrom.') AND `time` < FROM_UNIXTIME('.$intervalTo.') AND `item` = "'.$itemID.'"'));
    $accessLogs[$i] = $get['total'];
}

遅いとは言えませんが、1ページに5〜10個以上ある場合があります。そうすると、1つのアイテムに対して大量のクエリを実行することの欠点がわかり始めます。

1つまたは2つのMySQLクエリを使用してこの出力を取得するためのよりスマートで高速な方法はありますか?

ありがとう

編集:それはとても長いです、これができるかどうか疑問に思いますか?

4

0 に答える 0