私は広告管理システムに取り組んでおり、最近、いくつかのテストを行うためにトラフィックの多い Web サイトを立ち上げました。各インプレッションを、タイムスタンプ、広告 ID、ゾーン ID、および Web サイト ID とともにデータベースにレコードとして保存しています。
日付範囲内のすべてのデータを選択し、PHP を使用してレコードを整理します (日ごとなど)。それは非効率だったので、次の 2 つのクエリを作成します。
GROUP BY date(`impressions`.timestamp)
インプレッションを取得する最初count
のクエリ、関連付けられたラベルのリストを取得する 2 番目のクエリ。
私の問題はこれです:
全体的なインプレッションだけでなく、ゾーン別および日別のインプレッションを取得するためにクエリを実行する必要があります。このデータの配列は何百万ものポイントであるため、PHP を使用して整理することはできません。
SELECT `zones`.name as zoneName, `impressions`.*
from `impressions`, `zones`
WHERE `impressions`.website_id = "14"
AND `zones`.website_id="14"
AND `zones`.zone_id=`impressions`.zone_id
AND `impressions`.timestamp
BETWEEN "2012-10-08 00:00:00" AND "2012-10-15 23:59:59"
ORDER BY `impressions`.timestamp ASC
それは何百万ものレコードを返すかもしれません。次に、PHP を使用して、返されたデータをゾーンに分類します。
たとえば、これは PHP の並べ替えの結果の配列です。この配列は、ゾーンと、特定の日に受信したインプレッションを表します。大規模な配列を処理するときにメモリのオーバーヘッドを最小限に抑えるために、これにできるだけ近づけるために使用する適切なクエリは何ですか?
Array
(
[labels] => Array
(
[Oct 8th] => "Oct 8th"
[Oct 9th] => "Oct 9th"
[Oct 10th] => "Oct 10th"
)
[final] => Array
(
[0] => Array
(
[name] => Blog Skyscraper
[data] => Array
(
[0] => 449
[1] => 499
[2] => 558
)
)
[1] => Array
(
[name] => Latest News Right
[data] => Array
(
[0] => 805
[1] => 809
[2] => 760
)
)
[2] => Array
(
[name] => Photos Right
[data] => Array
(
[0] => 788
[1] => 786
[2] => 743
)
)
[3] => Array
(
[name] => Banner Zone
[data] => Array
(
[0] => 793
[1] => 796
[2] => 747
)
)
[4] => Array
(
[name] => Mini Right Bottom
[data] => Array
(
[0] => 784
[1] => 778
[2] => 742
)
)
[5] => Array
(
[name] => Mini Right Top
[data] => Array
(
[0] => 790
[1] => 787
[2] => 743
)
)
)
)