这个标题听起来很别扭,需求是这样的。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 = \common\models\Customer::find()->offset($offset)->limit($pageSize)->all(); # LIMIT 3 OFFSET 3 三的倍数
if (!empty($customerModel)) {
foreach ($customerModel as $value) {
$orderCount = \common\models\Order::find()->where("cid=:cid and status=3")->params(["cid" => $value->id])->count(); # 订单之和 状态3:完成
if ($orderCount) {
\common\models\Customer::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>";
}
来源:oschina
链接:https://my.oschina.net/u/4338930/blog/3274875