2012-05-09 22 views
0

私が持っている3つの列を持つ単純なreferrersテーブル:グループMySQLのクエリ結果

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) 

それは一種の私が探していますデータ与えるん:

:私はこの2つの問題を抱えている

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スクリプトは、常に現在の参照元の完全なリストを知っておく必要がありますので、reffererからのクリックは、所定の日になかった場合には0の値を割り当てることができます。あまり言わないほどエレガントではありません。

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

答えて

0

あなただけGROUP BY Date, Referrer

MySQLの結果は、「ギャップ」、特定の参照元が0ヒットを持つことになりますする期間を持つことになりますことができます。

リファラー(あなたの数がどれくらいあるかわからない)を色付けしておき、それぞれに一貫した色を使いたい場合は、数値ハッシュを計算し、定義済みの色の配列にインデックスとして使用できます。

ない私はすべてのあなたの質問に対処してきたか、あなたが私の答えのすべてを理解している場合かどうかを確認しますが、ちょうど叫ぶ:)

+0

GROUP BYは素晴らしい作品!ありがとう!それは非常に遅かったに違いない、私はそれを試みたと思った、私はそうしなかったようだ。 私はGoogleのチャートを使用していますので、私は一度だけ、各データ列に、各値のインスタンスごとに色を割り当てる必要はありませんが、その後、私は不足しているもののためにゼロに記入する必要があります。それを達成する最速の方法は何でしょうか? –

+0

データベースの結果から、すべての参照元のリストを最初にスキャンできます。いったんそれができたら、毎日繰り返すことができ、空白を埋めることができます。 –

関連する問題