背景
这是支持前端 Highcharts 安装的 API。用户可以选择“天”(24 小时)、一周(7 天)或自定义间隔,没有任何限制。由于所选日期范围的性质(已完成),x 轴(日期/时间)需要完全动态。
Y轴
我们计算 X 轴(日期)的方式工作得很好,但是我们在某一天返回空值时遇到了麻烦。
我们使用这个查询来计算值:
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`';
}
}