按多个条件对MySQL查询结果进行分组

时间:2012-05-09 03:02:26

标签: php mysql grouping

我有一个简单的referrers表,其中有三列:

Referrer    //string name of partner
TimeOfVisit //timestamp
SessionID   //(unique id only used when joining with sales data for conversion)

我想检索分析数据,并提供堆积柱形图,每天都有一列显示访问者的引荐来源。

这是我设法汇总的查询:

SELECT
    DATE(TimeOfVisit) AS Date,
    Referrer,
    COUNT(Referrer) AS VisitorCount
FROM referrers
GROUP BY CONCAT(DATE(time_of_visit), referrer)

它确实给了我正在寻找的数据:

Array
(
    [0] => Array
        (
            [Date] => 2012-04-01
            [Referrer] => adwords
            [VisitorCount] => 3
        )

    [1] => Array
        (
            [Date] => 2012-04-01
            [Referrer] => facebook
            [VisitorCount] => 5
        )

    [2] => Array
        (
            [Date] => 2012-04-02
            [Referrer] => adwords
            [VisitorCount] => 6
        )
...

我有两个问题:

  1. 即使我能感觉到,通过连接字符串进行分组是可怕的,只是感觉不对。
  2. 解析结果的php脚本总是需要知道当前引用的完整列表,因此如果在给定的一天没有来自引用者的点击,它可以分配0值。至少可以说不是很优雅。
  3. 解决此问题的最有效方法是什么?它实际上只能在MySQL中解决吗?

1 个答案:

答案 0 :(得分:0)

你可以GROUP BY Date, Referrer

MySQL结果将有“缺口”,某些推荐人将有0次点击。

假设您正在为引荐者着色(不确定您有多少)并希望每种引用都有一致的颜色,您可以计算数字哈希并将其用作预定义颜色数组的索引。

不确定我是否已解决了您的所有问题,或者您是否了解我的所有答案,但只是大喊:)