2011-06-30 15 views
1

私が探しているものに関連するクエリ文字列がいくつか見つかりましたが、これは何もありません。基本的には、時間間隔(時間、日、月、年)ごとにユニークビジターを表示する必要があるグラフがあります。したがって、Google Analyticsやthis Analytics Graphに似たグラフです。テーブルには訪問者ID列とタイムスタンプ列(0000-00-00 00:00:00のスタイル)があります。インターバルごとに一意の訪問者または合計訪問者を選択できる必要があります(例:5人は32人、6人は30人など)。日付間隔ごとにユニークビジターを選択するにはどうすればよいですか?

私の質問は、ちょうどクエリを使って効率的にこれを行うにはどうしようもないと思いますか?または、私はすべてのデータを取得するためにPHPを使用する必要があります(問題は、効率的ではないグラフ上の各点についてクエリを実行する必要があるということです)。

+0

必要なものは次のとおりです: 'GROUP BY'、' COUNT() '、' DATE() ' – zerkms

+0

この質問の重複によく似ています:http://stackoverflow.com/questions/366603/mysql-sql -group-date-on-a-datetime-column – jefflunt

答えて

1

あなたのデータを集計する必要があります。この文字列で検索してください:

SELECT DATE(data_timestamp), COUNT(visitor_id) 
FROM analytics_table 
WHERE DATE(data_timestamp) BETWEEN '2011-05-01' AND '2011-05-31' 
GROUP BY 1 

はここ(WARNING!:未テスト):あなたはあなたの月次データを取り込む方法を説明します

<?php 
$sql = "SELECT DATE(data_timestamp), COUNT(visitor_id) 
FROM analytics_table 
WHERE DATE(data_timestamp) BETWEEN '2011-05-01' AND '2011-05-31' 
GROUP BY 1"; 

$rs = mysql_query($rs); 
$date1 = $datex = '2011-05-01'; 
$date2 = '2011-05-31'; 

$arrayData = $tmpArray = array(); 

while($r = mysql_fetch_array($rs)) 
{ 
    $tmpArray[$r['date']] = $r['count']; 
} 

while($datex <= $date2) 
{ 
    if(isset($tmpArray[$datex])) 
    { 
     $arrayData[$datex] = $tmpArray[$datex]; 
    } 
    else 
    { 
     $arrayData[$datex] = 0; 
    } 
    list($y, $m, $d) = explode('-', $datex); 
    $datex = date('Y-m-d', mktime(0, 0, 0, $m, $d, $y)); 
} 


?> 

このクエリの使用は:

  • DATE()を取得しますあなたのデータの日付と
  • その特定の日付からの合計データを数えます。
  • とGROUP BYを使用して、選択したフィールドに基づいてデータをグループ化します。
+0

なぜ 'GROUP BY 2'ですか? – zerkms

+0

それは私が試したことの単純なバージョンですが、それは毎日(または月または年)の値を取得する問題を解決しません。たとえば、1日のユニークユーザー数で1か月のアクティビティがグラフに表示されます。 – Coolist

+0

@zerkms:ooops、私の悪い。 'GROUP BY 1'にする必要があります。 – ariefbayu

0

基本的に、DATETIME/TIMESTAMPを日付と時間に別々にキャストし、GROUP BYを使用して必要な結果を得ることができます。

MySQL/SQL: Group by date only on a Datetime column

+0

日付間隔でそれをどのように使用しますか? (例:1か月間の合計合計) – Coolist

+0

DATEのみにキャストする(時刻は1/1/01、1/2/01、1/3/01など)、SQLステートメント日付だけでCOUNT(*)とGROUP BYを実行します。 – jefflunt

0

訪問者がいない場合、GROUP BYは0の値を返しません。それは時間の連続性で穴に降りかかるでしょう。などを「カウント」とcronで毎日そこにデータを挿入し、フィールド「日付」で集計表を作成します)他の人が言ったように、グループは)

1、その後、穴

2を見つける:そこは二つの方法があります。

関連する問題