多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
mysql按天统计的时候,该天没有数据也要统计为0 网上很多方法都是在mysql里面处理的,但我发现在mysql里面处理的这种方式可能会因为你的where条件导致查出来的数据并没有补上0。既然现在又遇到了,前端又不想处理,那我就在取出数据之后做处理吧。 没有多难就是比较常规的思路,就是把没有数据的那几天数据补0。但是你要算出哪些日期是没有数据的,要把数据填充到数组里面。例如,2021-12-01、2021-12-05、2021-12-07、2021-12-08这组数据,就要把中间空的03、04、06这些数据都填补上去,记住还不能重复。 ``` //补差天数统计数据($startTime是开始时间戳,比如是2021-12-01,但是我们表里查出的$info数据是从2021-12-07才开始有数据) public function addArrayData($startTime, $info) { $list = []; foreach ($info as $k => $v) { //补全在查到有日期的数据前空出来的日期数据 if (strtotime($v['days']) - $startTime != 0 && $k == 0) { $days = intval((strtotime($v['days']) - $startTime) / 86400); for ($i = 0; $i < $days; $i++) { $list[] = [ 'total_nums' => 0, 'days' => date('Y-m-d', $startTime + (86400 * $i)), ]; } } $list[] = [ 'total_nums' => round($v['total_nums'], 2), 'days' => $v['days'] ]; //判断距离下一个有数据的日期距离现在多少天,然后把这些空日期都补上 if (!empty($info[$k + 1]) && intval((strtotime($info[$k + 1]['days']) - strtotime($v['days'])) / 86400) > 1) { $diffDays = intval((strtotime($info[$k + 1]['days']) - strtotime($v['days'])) / 86400); for ($i = 1; $i < $diffDays; $i++) { $list[] = [ 'total_nums' => 0, 'days' => date('Y-m-d', strtotime($v['days']) + (86400 * $i)), ]; } } } return $list; } ```