代码分享解决Laravel中MySQL WhereIn之too many placeholders技术
MySQL 执行的时候 WhereIn 太多的 ID 参数,导致 PDO 报错。解决方法,分批量执行,然后将结果合并。
下面以 range 函数做了一个简单的例子,计算 1 到 100 的加法。
public function cu(){
$arr = range(1, 100);
$cl = function ($part_ids) {
return array_sum($part_ids);
};
$re = $this->portionExecute($cl, $arr);
var_dump($re);
$re = $this->portionExecute($cl, $arr, 10);
var_dump($re);
}
public function portionExecute($closureJob, $dataArr, $portion_count = 1000){
$result = [];
if(count($dataArr) > $portion_count) {
for ($i = 0, $c = ceil(count($dataArr)/$portion_count); $i < $c; $i++){
$part_ids = array_slice($dataArr, $i*$portion_count, $portion_count);
$result[] = $closureJob($part_ids);
}
} else {
$result = $closureJob($dataArr);
}
return $result;
}
相关文章
暂无