it0_soft 2023-11-16 12:45 采纳率: 50%
浏览 4
已结题

Tp5.0数据查询列表按年月统计某些指定列的总数

设计了一个分销统计系统列表,按店铺、产品统计每年每月的分销数量,如图:

img


我写的代码查询出来总是空的,不知道哪里出问题了。

$y = date('Y', $value['add_time']);
                if (!empty($y)) {
                    // 统计每月的销售量
                    for ($i = 0; $i < 12; $i++) {
                        $m      = $i + 1;
                        $result = Db::name('fenxiao')
                            ->where(['dpjc' => ['like', '' . $value['dpjc'] . '%'], 'cpid' => $value['cpid']])
                            ->where('YEAR(add_time) = '.$y.'')
                            ->where('yue', intval($i + 1))
                            ->field('sum(week1) as wk1, sum(week2) as wk2, sum(week3) as wk3, sum(week4) as wk4')
                            ->select();
                    }

                }

哪位帮个忙看下,感激不尽!

  • 写回答

12条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2023-11-16 17:07
    关注

    试试这个:
    在你的代码中,使用了一个 for 循环来查询每个月的分销数量,但是在循环内部的查询结果 $result 每次都会被覆盖,最终只会得到最后一个月的查询结果。如果你想要得到每个月的分销数量,你需要将查询结果保存在一个数组中。此外,你也可以优化你的查询条件和字段选择。

    下面是修改后的代码:

    $y = date('Y', $value['add_time']);
    if (!empty($y)) {
        // 初始化一个数组用于保存每个月的分销数量
        $monthlyData = [];
    
        // 统计每月的销售量
        for ($i = 0; $i < 12; $i++) {
            $m = $i + 1;
            // 查询条件中使用参数绑定,避免 SQL 注入风险
            $result = Db::name('fenxiao')
                ->where([
                    'dpjc' => ['like', '' . $value['dpjc'] . '%'],
                    'cpid' => $value['cpid'],
                    'add_time' => ['between', [strtotime("$y-$m-01"), strtotime("$y-$m-31 23:59:59")]],
                ])
                ->field('SUM(week1) as wk1, SUM(week2) as wk2, SUM(week3) as wk3, SUM(week4) as wk4')
                ->find();
    
            // 将查询结果保存到数组中
            $monthlyData[$m] = $result;
        }
    
        // 在这里处理 $monthlyData 数组,包含了每个月的分销数量
    }
    

    这里使用了 $result = Db::name('fenxiao')->find(); 替代了 $result = Db::name('fenxiao')->select();,因为你只需要一行记录,而不是所有匹配的记录。此外,查询条件中使用了参数绑定,可以提高代码的安全性。最后,查询结果保存在 $monthlyData 数组中,你可以在循环结束后对该数组进行进一步的处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 赞助了问题酬金15元 11月16日
  • 创建了问题 11月16日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度