这是为前端Highcharts安装提供支持的API。用户可以选择“天”(24小时),一周(7天)或自定义间隔,没有任何限制。由于所选日期范围的性质(已完成),x轴(日期/时间)需要完全动态。
我们计算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(作为示例)。
所以问题是,如何修改我的查询以返回值0,因为videos
表中没有该日期/时间和WHERE标准的行?
以下是我们目前计算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`';
}
}
答案 0 :(得分:0)
我会尝试在所有日子(从1月1日到12月31日)享受餐桌DAYS。
然后进行LEFT JOIN。如果度量标准为null,则结果为ZERO =&gt;
SELECT IF(tmp.metric IS NULL,0,tmp.metric),DAYS.datestr FROM DAYS LEFT JOIN (
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`
) tmp ON DAYS.datestr=tmp.`sqltime`
ORDER BY `sqltime` ASC
(我想这里DAYS.datestr的格式与sqltime相同)。
这就是我在QUERY中的表现。但我真的会用PHP做,首先将整个数组设置为0,然后将其与查询结果合并。
HIH