gpt4 book ai didi

php - 从 FROM_UNIXTIME 返回 0 计数

转载 作者:搜寻专家 更新时间:2023-10-31 22:13:14 24 4
gpt4 key购买 nike

背景

这是为前端 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。所以这是图表当前的样子:

Sample

但它确实应该看起来像这样: Corrected

红线所在的位置。唯一的方法是为 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`';
}

}

最佳答案

我会尝试使用包含所有日期(从 1 月 1 日到 12 月 31 日)的表格 DAYS。

然后进行 LEFT JOIN。如果指标为空,则结果为零 =>

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 值,然后将其与查询结果合并。

关于php - 从 FROM_UNIXTIME 返回 0 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10130259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com