バックグラウンド
これは、フロントエンドのHighchartsインストールを強化するAPIです。ユーザーは、「日」(24時間)、1週間(7日)、またはカスタム間隔を制限なしで選択できます。選択した日付範囲の性質により、x軸(日付/時刻)は完全に動的である必要があります(これは完了しています)。
Y軸
X軸(日付)の計算方法はかなりうまく機能していますが、特定の日にnull値を返すのに問題があります。
このクエリを使用して値を計算しています。
SELECT COUNT(u.videoid) AS metric,
FROM_UNIXTIME(u.TIME, '%M %e, %Y') AS `sqltime`
FROM videos u
WHERE ( u.TIME >= 1291179600
AND u.TIME <= 1293858000 )
AND u.channel = '48'
GROUP BY `sqltime`
ORDER BY `sqltime` ASC
出力例は次のとおりです。
metric sqltime
2 December 13, 2010
9 December 14, 2010
1 December 15, 2010
7 December 16, 2010
32 December 17, 2010
10 December 18, 2010
6 December 19, 2010
17 December 20, 2010
19 December 21, 2010
10 December 22, 2010
20 December 23, 2010
8 December 24, 2010
9 December 26, 2010
33 December 27, 2010
29 December 28, 2010
24 December 29, 2010
34 December 30, 2010
11 December 31, 2010
問題は、12月25日の値(メトリックの値として0)が返されないことです。これにより、Highchartsは0を表示するのではなく、値を完全にスキップします。したがって、現在のグラフは次のようになります。
しかし、実際には次のようになります。
赤い線がどこにあるか。これを行う唯一の方法は、2010年12月25日の値0を返すことです(例として)。
質問
videos
したがって、もう一度質問します。その日付/時刻とWHERE基準の行がテーブルにない場合に、クエリを変更して値0を返すにはどうすればよいですか。
詳細情報
現在、x軸を計算している方法は次のとおりです。
public function getCordinateCount()
{
$totalTime = $this->endTime - $this->startTime;
// 86400 seconds in a day.
$days = ceil($totalTime / 86400);
if($days <= 1) {
return 'FROM_UNIXTIME( u.time, \'%M %e, %Y %H:00\') AS `sqltime`';
} elseif ($days < 60) {
return 'FROM_UNIXTIME( u.time, \'%M %e, %Y\') AS `sqltime`';
} else {
return 'DATE_FORMAT(
SUBDATE(
FROM_UNIXTIME( u.time ),
INTERVAL WEEKDAY( FROM_UNIXTIME( u.time ) ) DAY
),
\'%M %e, %Y\') as `sqltime`';
}
}