中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Thinkphp批量更新數據的方法匯總
來源:易賢網 閱讀:3329 次 日期:2016-08-16 15:01:00
溫馨提示:易賢網小編為您整理了“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]&&$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 

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)>0&count($error)<$len){

//先將原先的預處理進行回滾

$model->rollback();

for($i=0;$i<count($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(){

//要更新的數據表的主鍵數組

$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批量更新數據的方法匯總,希望對大家有所幫助

更多信息請查看網絡編程
易賢網手機網站地址:Thinkphp批量更新數據的方法匯總
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
一级日韩一区在线观看| 狂野欧美一区| 亚洲欧美日韩一区在线| 久久精品国语| 国产精品国产三级国产aⅴ入口 | 99精品欧美一区二区蜜桃免费| 亚洲一区二区伦理| 欧美成人激情在线| 国产日本亚洲高清| 亚洲乱码精品一二三四区日韩在线 | 玖玖视频精品| 国产精品久久久久久久久久久久久久| 伊人夜夜躁av伊人久久| 亚洲一区二区成人| 欧美日韩免费观看一区=区三区| 国产一区久久久| 久久久久久精| 国产美女精品视频免费观看| 欧美在线播放一区二区| 国产精品另类一区| 亚洲欧美国产日韩天堂区| 欧美午夜在线视频| 午夜精品久久久久久99热软件| 国产精品白丝av嫩草影院| 宅男精品导航| 国产精品久久久久久久久| 久久久精品tv| 欧美小视频在线观看| 一个人看的www久久| 欧美视频在线观看 亚洲欧| 亚洲一级高清| 国产精品综合网站| 久久中文欧美| 在线亚洲美日韩| 国产欧美日本一区视频| 久久综合色播五月| 极品尤物av久久免费看| 欧美大色视频| 亚洲天堂av在线免费观看| 国产精品久久久久久久久久免费看 | 欧美日韩中文字幕在线视频| 亚洲国产另类久久精品| 免费亚洲电影在线| 小嫩嫩精品导航| 日韩视频在线观看国产| 狠狠色伊人亚洲综合网站色| 国产精品高精视频免费| 欧美精品九九| 女人色偷偷aa久久天堂| 久久综合久久综合这里只有精品| 久久国产免费看| 亚洲丝袜av一区| 国产欧美精品在线| 欧美激情精品久久久久久免费印度| 午夜精品久久久久久久| 亚洲一区二区三区四区中文 | 国产精品一区二区欧美| 欧美日韩少妇| 国产精品国产三级国产aⅴ浪潮| 美女999久久久精品视频| 久久久久中文| 久久av一区| 久久视频在线视频| 久久嫩草精品久久久久| 欧美在线日韩| 久久日韩粉嫩一区二区三区| 亚洲中字在线| 欧美一区二区三区在线看| 亚洲女优在线| 欧美日韩午夜视频在线观看| 国产亚洲欧美一区二区| 国产精品成人在线| 国产欧美短视频| 欧美午夜大胆人体| 欧美午夜一区二区福利视频| 欧美日韩精品一本二本三本| 欧美bbbxxxxx| 欧美午夜精品电影| 欧美经典一区二区三区| 国产精品黄视频| 国产欧美在线播放| 亚洲黄色免费网站| 亚洲欧美日韩专区| 久久久成人网| 欧美午夜一区二区福利视频| 国产日韩欧美夫妻视频在线观看| 国产精品欧美在线| 韩日精品视频| 亚洲一区二区三区国产| 久久精品综合一区| 欧美三区免费完整视频在线观看| 韩日精品在线| 亚洲尤物在线| 在线播放亚洲| 校园激情久久| 欧美日韩精品一二三区| 国内综合精品午夜久久资源| 亚洲无线一线二线三线区别av| 久久久中精品2020中文| 一个色综合导航| 男人的天堂成人在线| 国产麻豆9l精品三级站| 在线视频亚洲欧美| 牛牛国产精品| 影音先锋日韩资源| 午夜天堂精品久久久久| 国产精品高潮呻吟久久| 在线观看亚洲a| 久久久久久夜| 亚洲高清毛片| 欧美精品在线网站| 亚洲人成在线免费观看| 欧美91福利在线观看| 在线国产亚洲欧美| 久久久久国产精品一区二区| 国产伦精品一区| 久久久久久久999精品视频| 欧美天天在线| 亚洲午夜精品一区二区| 欧美四级电影网站| 亚洲视频第一页| 欧美日韩在线免费| 亚洲视频在线观看网站| 国产麻豆午夜三级精品| 欧美一区二区视频在线观看| 国产精品分类| 久久不射网站| 一区精品在线| 久热国产精品视频| 亚洲精品在线免费观看视频| 欧美日韩国产探花| 亚洲午夜视频在线观看| 国产日韩在线看| 能在线观看的日韩av| 欧美日韩一区二区三区在线看 | 国产深夜精品福利| 久久久久久夜精品精品免费| 性18欧美另类| 国语对白精品一区二区| 欧美成人一区二区在线| 午夜精品一区二区三区在线| 国产日产高清欧美一区二区三区| 欧美一区二区三区久久精品茉莉花| 黑人一区二区| 欧美日韩伊人| 久久躁日日躁aaaaxxxx| 午夜精品亚洲| 99视频有精品| 在线精品视频一区二区| 国产精品美女在线| 欧美日韩精品欧美日韩精品一| 久久久久9999亚洲精品| 亚洲欧美日韩视频一区| 99在线精品免费视频九九视| 国产亚洲一级高清| 欧美国内亚洲| 久久综合狠狠| 久久福利电影| 午夜影视日本亚洲欧洲精品| 亚洲欧洲午夜| 亚洲国产成人精品久久久国产成人一区 | 久久久国产精品一区二区中文| 亚洲一级特黄| 亚洲国产免费| 国产精品一区久久久久| 国产欧美精品日韩区二区麻豆天美| 欧美国产日韩一区二区三区| 玖玖玖国产精品| 欧美精品18+| 欧美日本乱大交xxxxx| 欧美大尺度在线| 麻豆国产精品va在线观看不卡| 久久久av毛片精品| 久久精品72免费观看| 久久久久久久尹人综合网亚洲| 欧美亚洲视频在线看网址| 亚洲日本视频| 亚洲天堂成人在线观看| 亚洲视频 欧洲视频| 性一交一乱一区二区洋洋av| 亚洲欧美成人网| 欧美伊人久久| 久久激情久久| 久久蜜臀精品av| 欧美韩日亚洲| 国产精品亚洲综合一区在线观看| 欧美性猛交xxxx乱大交退制版| 国产日韩一区| 亚洲电影在线看| 99精品视频免费全部在线| 午夜在线视频一区二区区别| 久久中文字幕一区二区三区| 欧美日韩理论| 在线成人中文字幕| 亚洲伊人一本大道中文字幕| 蜜臀av国产精品久久久久| 欧美日本亚洲韩国国产| 国产精品theporn88| 国产真实乱偷精品视频免| 9色porny自拍视频一区二区|