我正在开发一个广告管理系统,最近,我们在一个高流量网站上进行了一些测试。我将每个印象作为记录存储在数据库中,带有时间戳、广告 ID、区域 ID 和网站 ID。
我会选择日期范围内的所有数据,并使用 PHP 来组织记录(按天等)。那是低效的,所以我做了两个查询
GROUP BY date(`impressions`.timestamp)
第一个查询检索count
展示次数,第二个查询获取相关标签列表。
我的问题是这样的:
我需要查询的不仅是总体印象,还包括按区域和天的印象,我不能使用 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
)
)
)
)