PHP 使用分页方法修改多数据字段

这个标题听起来很别扭,需求是这样的。mysql中的customer表有5000条数据。现在要给customer表添加一个order_num 字段,客户每下单一次就update这个字段+1.

是的,新增加的字段只要之后客户完成下单就会+1,问题是,之前客户下过多少单子,也要同步到order_num。

所以,思路就是这样的。如果一次取出5000的客户,循环每一个客户在去order表查找订单个数。估计set_time_limit就超时了,然后呢,想起了php的分页请求,等一个limit 分页大小的数据请求修改完成后,在分页请求下一页的数据进行修改。

伪代码:

  $page=  isset($_GET["page"])?$_GET["page"]:'';  # 当前第N分页
        if(!$page){
            $page=1;
        }
          echo "当前第{$page}页<hr>";

        $pageSize=3;  # 分页大小
        $offset=$page==1?0:($page-1)*$pageSize;  # 当前offset
        
        sleep(5); # 睡眠5秒,模拟后台程序执行
        echo "select * from customer where 1=1 limit {$pageSize} offset {$offset}  <hr>";  
        if($page*$pageSize>13){  # count 为空 更新完成
            echo '更新完成';
            exit();
        }

         $page++;      
      echo   $url="/crontab/customer-order-num?page={$page}";
      echo "<script> window.location.href='{$url}'; </script>";

Yii2 分页更新字段订单量:

       $page = isset($_GET["page"]) ? $_GET["page"] : '';  # 当前第N分页
        if (!$page) {
            $page = 1;
        }
        echo "当前第{$page}页<hr>";

        $pageSize = 3;  # 分页大小
        $offset = $page == 1 ? 0 : ($page - 1) * $pageSize;  # 当前offset

        sleep(3); # 睡眠5秒,模拟后台程序执行
        $customerModel = commonmodelsCustomer::find()->offset($offset)->limit($pageSize)->all();  # LIMIT 3 OFFSET 3   三的倍数
        if (!empty($customerModel)) {
            foreach ($customerModel as $value) {
                $orderCount = commonmodelsOrder::find()->where("cid=:cid and status=3")->params(["cid" => $value->id])->count(); # 订单之和 状态3:完成
                if ($orderCount) {
                    commonmodelsCustomer::updateAll(["order_num" => $orderCount], "id={$value->id}");
                }
            }
        } else {  # count 为空 更新完成
            echo '更新完成';
            exit();
        }

        $page++;
        echo $url = "/crontab/customer-order-num?page={$page}";
        echo "<script> window.location.href='{$url}'; </script>";
    }

原文地址:https://www.cnblogs.com/dcb3688/p/4608038.html