欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

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

    • 资源ID:11614594       资源大小:14.23KB        全文页数:10页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    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(); $fields=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($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(); $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语句实现批量更新呢?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部分不影响代码的执行,但是会提高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) 实际运用 $display_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)" 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_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; $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=array_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(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批量更新数据的方法汇总,盼望对大家有所关心 .

    注意事项

    本文(Thinkphp批量更新数据的方法汇总_.docx)为本站会员(PIYPING)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开