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

上传人:PIYPING 文档编号:11614594 上传时间:2021-08-26 格式:DOCX 页数:10 大小:14.23KB
返回 下载 相关 举报
Thinkphp批量更新数据的方法汇总_.docx_第1页
第1页 / 共10页
Thinkphp批量更新数据的方法汇总_.docx_第2页
第2页 / 共10页
Thinkphp批量更新数据的方法汇总_.docx_第3页
第3页 / 共10页
Thinkphp批量更新数据的方法汇总_.docx_第4页
第4页 / 共10页
Thinkphp批量更新数据的方法汇总_.docx_第5页
第5页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Thinkphp批量更新数据的方法汇总_.docx》由会员分享,可在线阅读,更多相关《Thinkphp批量更新数据的方法汇总_.docx(10页珍藏版)》请在三一文库上搜索。

1、Thinkphp批量更新数据的方法汇总_ 这篇文章主要介绍了Thinkphp批量更新数据的方法汇总的相关资料,特别不错,具有参考借鉴价值,需要的伴侣可以参考下 方法一: /批量修改 data二维数组 field关键字段 参考ci 批量修改函数 传参方式 function batch_update($table_name=,$data=array(),$field=) if(!$table_name|!$data|!$field) return false; else $sql=UPDATE .$table_name; $con=array(); $con_sql=array(); $field

2、s=array(); foreach ($data as $key = $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$x0) $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(

3、$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

4、$res; /测试 function test() $update_array=array(); for ($i=2; $i 7 ; $i+) $data=array(); $dataid=$i; $datamemeber_type=2; $datamemeber_type_state=1; $update_array=$data; $res=$this-batch_update(yl_member,$update_array,id); var_dump($res); 方法二: 即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很简单造成堵塞。 那么能不能一条sql语句实现

5、批量更新呢?mysql并没有供应挺直的方法来实现批量更新,但是可以用点小技巧来实现。 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部分不影响代码的执行

6、,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。 假如更新多个值的话,只需要稍加修改: 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,2,3) 实际运用 $disp

7、lay_order = array( 1 = 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)

8、; echo $sql; 方法二不建议用法。 方法三: /* * param $saveWhere :想要更新主键ID数组 * param $saveData :想要更新的ID数组所对应的数据 * param $tableName : 想要更新的表明 * param $saveWhere : 返回更新胜利后的主键ID数组 * */ public function saveAll($saveWhere,$saveData,$tableName) if($saveWhere=null|$tableName=null) return false; /猎取更新的主键id名称 $key = array_

9、keys($saveWhere)0; /猎取更新列表的长度 $len = count($saveWhere$key); $flag=true; $model = isset($model)?$model:M($tableName); /开启事务处理机制 $model-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

10、; $flag=false; /$flag=$flag$isRight; if($flag ) /假如都成立就提交 $model-commit(); return $saveWhere; elseif(count($error)0count($error)$len) /先将原先的预处理进行回滚 $model-rollback(); for($i=0;$icount($error);$i+) /删除更新失败的ID和Data unset($saveWhere$key$error$i); unset($saveData$error$i); /重新将数组下标进行排序 $saveWhere$key=ar

11、ray_merge($saveWhere$key); $saveData=array_merge($saveData); /进行其次次递归更新 $this-saveAll($saveWhere,$saveData,$tableName); return $saveWhere; else /假如都更新就回滚 $model-rollback(); return false; 在测试方法中调用: public function test() /要更新的数据表的主键数组 $whereID=array(70,73,74,80,83); /ID主键数组对应的待更新数据 $save=array( array

12、(School=DK Univisity01,isExport=0), array(School=DK Univisity02,isExport=0), array(School=DK Univisity03,isExport=0), array(School=DK Univisity04,isExport=0), array(School=,isExport=0), / array(School= Univisity05,isExport=0), ); $f=$this-saveAll($where,$save,want); if(count($fID)0) /返回更新胜利的ID数组 echo This is success :/br; dump($f); echo ok; else /更新失败操作 echo This is failed :/br; dump($f); echo error; 以上所述是我给大家介绍的Thinkphp批量更新数据的方法汇总,盼望对大家有所关心 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1