2017-09-08 13 views
0

私はanychartsでダッシュボードを構築しています。 mysqlデータベースからJSON形式のデータを取得します。クエリの 例:MysqlクエリAnyChart JSONデータに日付がありません

SELECT DATE(data_inscricao) AS name, COUNT(id) AS value FROM utilizador GROUP BY name 

だから、私は登録日ごとにグループ化され登録されているすべてのユーザーの数を取得しています。

例の結果:

[{name: "2016-01-22",value: "7"}, {name: "2016-01-25", value: "3"}, {name: "2016-01-26", value: "1"}, {name: "2016-01-27", value: "2"}, {name: "2016-02-02", value: "1"}, ... 

は、任意の登録は2016年1月23日、2016年1月24日のように、そこではなかった日付を0(ゼロ)を表示したい2016から01 I'il -28、...

これは可能ですか?

ありがとうございました

答えて

0

まず、日付の最小値と最大値を定義する必要があります。次に、期間の毎日を含む配列を生成し、データベースの値とマージすることができます。あなたのケースでは、我々が持っている2016-01-22 - 2016-02-02期間:

<?php 
$begin = new DateTime('2016-01-22'); 
$end = new DateTime('2016-02-02'); 

$allDays = []; 
$interval = DateInterval::createFromDateString('1 day'); 
$period = new DatePeriod($begin, $interval, $end); 
foreach ($period as $dt) { 
    $allDays[$dt->format('Y-m-d')] = '0'; 
} 
foreach ($array as $key => $dayFromDB) { 
    $allDays[$dayFromDB->name] = $dayFromDB->value; 
} 
var_dump($allDays); 

ここ$arrayは、DBのあなたの配列です。その後、次のようなものが得られます:

array (size=12) 
'2016-01-22' => string '7' (length=1) 
'2016-01-23' => string '0' (length=1) 
'2016-01-24' => string '0' (length=1) 
'2016-01-25' => string '3' (length=1) 
'2016-01-26' => string '1' (length=1) 
'2016-01-27' => string '2' (length=1) 
'2016-01-28' => string '0' (length=1) 
'2016-01-29' => string '0' (length=1) 
'2016-01-30' => string '0' (length=1) 
'2016-01-31' => string '0' (length=1) 
'2016-02-01' => string '0' (length=1) 
'2016-02-02' => string '1' (length=1) 

私はあなたに役立つことを願っています!

+1

ありがとうDenniselite!これは完璧で非常に簡単なソリューションです。私は人々がカレンダーテーブルを示すことを恐れていた:) – mjpramos

関連する問題