0

3つの列を持つ単純な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
        )
...

これには2つの問題があります。

  1. 連結された文字列によるグループ化は恐ろしいことだと私でも感じることができますが、それは正しく感じられません。
  2. 結果を解析するphpスクリプトは、常に現在のリファラーの完全なリストを知る必要があるため、特定の日にリファラーからのクリックがなかった場合に備えて、0の値を割り当てることができます。控えめに言っても、あまりエレガントではありません。

この問題を解決するための最も効果的な方法は何ですか?それは実際にMySQLでのみ解決できますか?

4

1 に答える 1

0

あなたはただすることができますGROUP BY Date, Referrer

MySQL の結果には「ギャップ」があり、特定のリファラーのヒット数が 0 になる期間があります。

リファラーに色を付けており (何個あるかわからない)、それぞれに一貫した色を付けたいと仮定すると、数値ハッシュを計算し、それを事前定義された色の配列のインデックスとして使用できます。

私がすべての質問に答えたかどうか、または私の答えをすべて理解したかどうかはわかりませんが、ただ叫んでください :)

于 2012-05-09T03:25:17.110 に答える