mysql按天统计的时候,该天没有数据也要统计为0

7 篇文章 0 订阅
2 篇文章 0 订阅

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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值