tp5循环查询语句_tp5 foreach 套循环的优化(就是foreach 里边再查表)

本文提供了一种优化SQL查询的方法,通过预处理和批量查询,避免在foreach循环中频繁地从数据库中获取数据,显著减少资源消耗。作者给出了原代码和优化后的示例,展示了如何利用`in`操作符一次性查询多个数量,减少数据库交互次数。
摘要由CSDN通过智能技术生成

优化建议:

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值