这个标题听起来很别扭,需求是这样的。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>"; }