tp5循环查询语句_tp5 foreach 套循环的优化(就是foreach 里边再查表)
優化建議:
1.不要foreach里邊再查詢表,因為循環多次查表會很占資源的
2.沒有辦法就關聯表查詢join
例子:
原寫法:
$rsdo=Db::name('order')->field('id,number,pay_number,type')->where('user_id', $user_id)->where('state',0)->where('deleted',0)->select();
if(!empty($rsdo)){
foreach($rsdo as $rsdel){
//查詢order_product中有沒有相應number的商品,如果沒有就刪除訂單記錄
$prs=Db::name('order_product')->field('id')->where('user_id', $user_id)->where('number',$rsdel['number'])->find();
if(!$prs['id']){//不存在就刪除
Db::name('order')->where('id',$rsdel['id'])->delete();
}
}
}
優化語句:(沒有實測,大概意思)
$rsdo=Db::name('order')->field('id,number,pay_number,type')->where('user_id', $user_id)->where('state',0)->where('deleted',0)->select();
if(!empty($rsdo)){
$number_list = array_column($rsdo, 'number');
$prs = Db::name('order_product')->field('id')->where('user_id', $user_id)->where('number',['in', $number_list])->column('id','number');
$delete_order_ids = [];
foreach($rsdo as $rsdel){
//不存在就刪除
if(empty($prs[$rsdel['number']])){
$delete_order_ids[] = $rsdel['id'];
}
}
$delete_order_ids = array_unique($delete_order_ids);
if(!empty($delete_order_ids)){
Db::name('order')->where('id',['in', $delete_order_ids])->delete();
}
}
總結
以上是生活随笔為你收集整理的tp5循环查询语句_tp5 foreach 套循环的优化(就是foreach 里边再查表)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vb6 datagrid表格垂直居中_老
- 下一篇: python怎么判断输入的是不是数字_如