亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

Thinkphp批量更新數據的方法匯總

2024-05-04 23:47:31
字體:
來源:轉載
供稿:網友

以下小編給大家列出了三種實現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]&&$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并沒有提供直接的方法來實現批量更新,但是可以用點小技巧來實現。

UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 ENDWHERE 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'ENDWHERE 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)>0&count($error)<$len){//先將原先的預處理進行回滾$model->rollback();for($i=0;$i<count($error);$i++){//刪除更新失敗的ID和Dataunset($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(){//要更新的數據表的主鍵數組$where['ID']=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($f['ID'])>0){//返回更新成功的ID數組echo "This is success :</br>";dump($f);echo 'ok';}else{//更新失敗操作echo "This is failed :</br>";dump($f);echo 'error';}}

以上所述是小編給大家介紹的Thinkphp批量更新數據的方法匯總,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品在线免费| 国产视频999| 欧美电影在线播放| 亚洲999一在线观看www| 国产一级揄自揄精品视频| 国内精品一区二区三区| 欧美日韩久久久久| 国产欧美日韩综合精品| 精品动漫一区二区三区| 国产精品人人做人人爽| 亚洲视频一区二区| 午夜精品一区二区三区在线视频| 伊人亚洲福利一区二区三区| 日韩精品免费一线在线观看| 久久人人爽人人爽人人片亚洲| 欧美日韩成人在线播放| 91经典在线视频| 国产精品极品美女粉嫩高清在线| 欧美一级大片在线免费观看| 国产午夜精品视频免费不卡69堂| 国产精品男女猛烈高潮激情| 国产精品久久999| 欧美日韩美女视频| 国产91精品青草社区| 91免费在线视频网站| 欧美国产日韩xxxxx| 亚洲电影免费观看高清完整版在线观看| 欧美一区二区三区四区在线| 国产精品一区久久| 日本a级片电影一区二区| 精品国内产的精品视频在线观看| www.日韩不卡电影av| 91国偷自产一区二区三区的观看方式| 亲爱的老师9免费观看全集电视剧| 欧洲亚洲在线视频| 国产精品91久久| 国产精品观看在线亚洲人成网| 国产精品久久久久久久久久99| 日韩高清人体午夜| 97免费视频在线播放| 欧美激情欧美激情在线五月| 亚洲免费福利视频| 国产精品劲爆视频| 亚洲影影院av| 日韩视频第一页| 国产精品wwww| 国产精品女人网站| 国产伦精品一区二区三区精品视频| 色久欧美在线视频观看| 国产精品久久久久久久久借妻| 精品久久久久久久久中文字幕| 性色av一区二区三区红粉影视| 中文字幕一区日韩电影| 成人黄色av免费在线观看| 国产又爽又黄的激情精品视频| 亚洲性av在线| 欧美日韩不卡合集视频| 韩国三级日本三级少妇99| 国产香蕉97碰碰久久人人| 国语自产偷拍精品视频偷| 亚洲国产欧美一区二区丝袜黑人| 一区二区成人精品| www.99久久热国产日韩欧美.com| 欧美一区二区三区免费视| 久久精品中文字幕一区| 国产精品久久久久久久久男| 青青草成人在线| 日产精品99久久久久久| 日韩欧美在线视频| 欧美日韩一区免费| 欧美另类xxx| 亚洲国产精品yw在线观看| 亚洲自拍av在线| 美女福利视频一区| 国产欧美va欧美va香蕉在| 午夜精品久久久久久99热软件| 亚洲自拍小视频免费观看| 最近更新的2019中文字幕| 91精品视频在线免费观看| 亚洲精品aⅴ中文字幕乱码| 欧美国产亚洲精品久久久8v| 91av在线免费观看视频| 精品女同一区二区三区在线播放| 国产精品自产拍高潮在线观看| 国产精自产拍久久久久久蜜| 欧美高清一级大片| 中文字幕亚洲色图| 久久精品中文字幕电影| 亚洲色图15p| 国产欧美欧洲在线观看| 亚洲欧美日韩国产成人| 亚洲第一网中文字幕| 亚洲网在线观看| 亚洲精品按摩视频| 欧美另类精品xxxx孕妇| 国产亚洲视频中文字幕视频| 欧美性猛交xxxx富婆| 欧美高清videos高潮hd| 欧美理论电影网| 国产成+人+综合+亚洲欧美丁香花| 国产成人av网址| 国产国语videosex另类| 久久国产精品久久久久久| 日韩中文字幕在线视频| 91国产高清在线| 亚洲国产精品成人va在线观看| 亚洲欧美制服另类日韩| 久久69精品久久久久久国产越南| 日韩av综合网站| 亚洲自拍偷拍网址| 亚洲精品一二区| 午夜精品视频在线| 国产精品无码专区在线观看| 国产视频精品va久久久久久| 欧美日韩激情美女| 国产一区二区在线播放| 国产精品第三页| 亚洲成人黄色在线| 成人av在线亚洲| 91精品久久久久久综合乱菊| 欧美激情区在线播放| 亚洲精品720p| 国产成人aa精品一区在线播放| 亚洲精品狠狠操| 亚洲影院色在线观看免费| 亚洲自拍另类欧美丝袜| 亚洲精品自产拍| 久久久久久久久国产| 成人亚洲欧美一区二区三区| 欧美日韩亚洲国产一区| 国内精品视频一区| 国产精品视频精品| 国产精品白嫩美女在线观看| 欧美视频专区一二在线观看| 欧美午夜精品久久久久久人妖| 国产精品青青在线观看爽香蕉| 亚洲欧美日韩天堂| 欧美性猛交xxxx乱大交3| 一个人www欧美| 奇米4444一区二区三区| 日韩国产在线播放| 国产精品h片在线播放| 国产成人精品a视频一区www| 98精品在线视频| 在线观看久久久久久| 久久久精品一区二区| 日韩av成人在线观看| 精品国产视频在线| 国产亚洲精品91在线| 成人美女av在线直播| 国产亚洲精品久久久久久牛牛| 亚洲国产精品99久久| 亚洲国产精品va在线| 在线精品播放av| 亚洲精品一区av在线播放| 成人国产精品一区二区| 亚洲天堂免费观看| 日韩综合中文字幕| 日韩激情在线视频| 日本欧美一二三区| 91欧美精品成人综合在线观看| 欧美又大又粗又长| 日韩欧美国产中文字幕| 久久成人在线视频|