Thinkphp批量更新数据的方法汇总

前端之家收集整理的这篇文章主要介绍了Thinkphp批量更新数据的方法汇总前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

以下小编给大家列出了三种实现thinkPHP批量更新数据的方法,写的不好还请见谅,有意见欢迎提出,共同学习进步!

方法一:

$value) { $x=0; foreach ($value as $k => $v) { if($k!=$field&&!$con[$x]&&$x==0){ $con[$x]=" set {$k} = (CASE {$field} "; }elseif($k!=$field&&!$con[$x]&&$x>0){ $con[$x]=" {$k} = (CASE {$field} "; } if($k!=$field){ $temp=$value[$field]; $con_sql[$x].= " WHEN '{$temp}' THEN '{$v}' "; $x++; } } $temp=$value[$field]; if(!in_array($temp,$fields)){ $fields[]=$temp; } } $num=count($con)-1; foreach ($con as $key => $value) { foreach ($con_sql as $k => $v) { if($k==$key&&$key<$num){ $sql.=$value.$v.' end),'; }elseif($k==$key&&$key==$num){ $sql.=$value.$v.' end)'; } } } $str=implode(',',$fields); $sql.=" where {$field} in({$str})"; $res=M($table_name)->execute($sql); return $res; } //测试 function test(){ $update_array=array(); for ($i=2; $i <7 ; $i++) { $data=array(); $data['id']=$i; $data['memeber_type']=2; $data['memeber_type_state']=1; $update_array[]=$data; } $res=$this->batch_update('yl_member',$update_array,id); var_dump($res); }

方法二:

即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。

那么能不能一条sql语句实现批量更新呢?MysqL并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。

PHP;"> UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END WHERE id IN (1,2,3)

这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则 display_order 的值为5。 即是将条件语句写在了一起。

这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

如果更新多个值的话,只需要稍加修改

PHP;"> UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END,title = CASE id WHEN 1 THEN 'New Title 1' WHEN 2 THEN 'New Title 2' WHEN 3 THEN 'New Title 3' END WHERE id IN (1,3)

实际运用

4,2 => 1,3 => 2,4 => 3,5 => 9,6 => 5,7 => 8,8 => 9 ); $ids = implode(',array_keys($display_order)); $sql = "UPDATE categories SET display_order = CASE id "; foreach ($display_order as $id => $ordinal) { $sql .= sprintf("WHEN %d THEN %d ",$id,$ordinal); } $sql .= "END WHERE id IN ($ids)"; echo $sql;

方法二不建议使用。

方法三:

startTrans(); //记录更新失败ID $error=[]; for($i=0;$i<$len;$i++){ //预处理sql语句 $isRight=$model->where($key.'='.$saveWhere[$key][$i])->save($saveData[$i]); if($isRight==0){ //将更新失败的记录下来 $error[]=$i; $flag=false; } //$flag=$flag&&$isRight; } if($flag ){ //如果都成立就提交 $model->commit(); return $saveWhere; }elseif(count($error)>0&count($error)<$len){ //先将原先的预处理进行回滚 $model->rollback(); for($i=0;$isaveAll($saveWhere,$saveData,$tableName); return $saveWhere; } else{ //如果都更新就回滚 $model->rollback(); return false; } }

在测试方法调用

'DK Univisity01','isExport'=>0),array('School'=>'DK Univisity02',array('School'=>'DK Univisity03',array('School'=>'DK Univisity04',array('School'=>'',// array('School'=>' Univisity05',); $f=$this->saveAll($where,$save,'want'); if(count($f['ID'])>0){ //返回更新成功的ID数组 echo "This is success :
"; dump($f); echo 'ok'; }else{ //更新失败操作 echo "This is Failed :
"; dump($f); echo 'error'; } }

以上所述是小编给大家介绍的ThinkPHP批量更新数据的方法汇总。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

原文链接:https://www.f2er.com/thinkphp/19474.html

猜你在找的ThinkPHP相关文章