php如何避免在循环中使用sql语句
1个回答
展开全部
1、循环内拼接sql语句,循环外执行
例如:
//假设这里的$users是一个很大的数组,我们要循环取出其中的值foreach($users as $user){//这部分的sql是我从项目中随便摘抄出来的。主要就是实现拼接sql语句$sql .= " ('{$order_sn}', '{$this->user_id}', '{$deliver_fee}', 0, "
. " '', '', '', "
. " '{$add_time}','{$order_status}', '{$order_amount}', '{$remark}', "
. " '{$pickup_code}', '{$self_pickup}', '{$collect_order_sn}', '{$key}', {$reservation_time}),";
}
//循环中拼接好sql之后,我们在循环外执行$sql = substr($sql, 0, -1);
DB::statement($sql);1234567891011
2、where条件换为where in()
比如我们的where()条件中要使用大规模的数组,那么在语句应该是:
foreach($arr as $v){
DB::table('')->where('id',$v->id);
}123
此时我们可以转变一下:
//先取出条件数组$arr,在直接执行whereIn即可DB::table('')->whereIn('id',$arr);12
注意:如果数据量很大,比如几十万条数据,那么whereIn也会成为代码的瓶颈,这个函数适用于数据量不是很大的情况。
例如:
//假设这里的$users是一个很大的数组,我们要循环取出其中的值foreach($users as $user){//这部分的sql是我从项目中随便摘抄出来的。主要就是实现拼接sql语句$sql .= " ('{$order_sn}', '{$this->user_id}', '{$deliver_fee}', 0, "
. " '', '', '', "
. " '{$add_time}','{$order_status}', '{$order_amount}', '{$remark}', "
. " '{$pickup_code}', '{$self_pickup}', '{$collect_order_sn}', '{$key}', {$reservation_time}),";
}
//循环中拼接好sql之后,我们在循环外执行$sql = substr($sql, 0, -1);
DB::statement($sql);1234567891011
2、where条件换为where in()
比如我们的where()条件中要使用大规模的数组,那么在语句应该是:
foreach($arr as $v){
DB::table('')->where('id',$v->id);
}123
此时我们可以转变一下:
//先取出条件数组$arr,在直接执行whereIn即可DB::table('')->whereIn('id',$arr);12
注意:如果数据量很大,比如几十万条数据,那么whereIn也会成为代码的瓶颈,这个函数适用于数据量不是很大的情况。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询