1

我正在开发一个广告管理系统,最近,我们在一个高流量网站上进行了一些测试。我将每个印象作为记录存储在数据库中,带有时间戳、广告 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
                    )

            )

    )

)

4

0 回答 0