茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    Thinkphp批量更新數(shù)據(jù)的方法匯總
    來(lái)源:易賢網(wǎng) 閱讀:3261 次 日期:2016-08-16 15:01:00
    溫馨提示:易賢網(wǎng)小編為您整理了“Thinkphp批量更新數(shù)據(jù)的方法匯總”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了Thinkphp批量更新數(shù)據(jù)的方法匯總的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

    方法一:

    //批量修改 data二維數(shù)組 field關(guān)鍵字段 參考ci 批量修改函數(shù) 傳參方式

    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;

    }

    //測(cè)試

    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);

    }

    方法二:

    即是循環(huán)一條一條的更新記錄。一條記錄update一次,這樣性能很差,也很容易造成阻塞。

    那么能不能一條sql語(yǔ)句實(shí)現(xiàn)批量更新呢?mysql并沒(méi)有提供直接的方法來(lái)實(shí)現(xiàn)批量更新,但是可以用點(diǎn)小技巧來(lái)實(shí)現(xiàn)。

    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。

    即是將條件語(yǔ)句寫(xiě)在了一起。

    這里的where部分不影響代碼的執(zhí)行,但是會(huì)提高sql執(zhí)行的效率。確保sql語(yǔ)句僅執(zhí)行需要修改的行數(shù),這里只有3條數(shù)據(jù)進(jìn)行更新,而where子句確保只有3行數(shù)據(jù)執(zhí)行。

    如果更新多個(gè)值的話,只需要稍加修改:

    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)

    實(shí)際運(yùn)用

    $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數(shù)組

    * @param $saveData :想要更新的ID數(shù)組所對(duì)應(yīng)的數(shù)據(jù)

    * @param $tableName : 想要更新的表明

    * @param $saveWhere : 返回更新成功后的主鍵ID數(shù)組

    * */

    public function saveAll($saveWhere,&$saveData,$tableName){

    if($saveWhere==null||$tableName==null)

    return false;

    //獲取更新的主鍵id名稱

    $key = array_keys($saveWhere)[0];

    //獲取更新列表的長(zhǎng)度

    $len = count($saveWhere[$key]);

    $flag=true;

    $model = isset($model)?$model:M($tableName);

    //開(kāi)啟事務(wù)處理機(jī)制

    $model->startTrans();

    //記錄更新失敗ID

    $error=[];

    for($i=0;$i<$len;$i++){

    //預(yù)處理sql語(yǔ)句

    $isRight=$model->where($key.'='.$saveWhere[$key][$i])->save($saveData[$i]);

    if($isRight==0){

    //將更新失敗的記錄下來(lái)

    $error[]=$i;

    $flag=false;

    }

    //$flag=$flag&&$isRight;

    }

    if($flag ){

    //如果都成立就提交

    $model->commit();

    return $saveWhere;

    }elseif(count($error)>0&count($error)<$len){

    //先將原先的預(yù)處理進(jìn)行回滾

    $model->rollback();

    for($i=0;$i<count($error);$i++){

    //刪除更新失敗的ID和Data

    unset($saveWhere[$key][$error[$i]]);

    unset($saveData[$error[$i]]);

    }

    //重新將數(shù)組下標(biāo)進(jìn)行排序

    $saveWhere[$key]=array_merge($saveWhere[$key]);

    $saveData=array_merge($saveData);

    //進(jìn)行第二次遞歸更新

    $this->saveAll($saveWhere,$saveData,$tableName);

    return $saveWhere;

    }

    else{

    //如果都更新就回滾

    $model->rollback();

    return false;

    }

    }

    在測(cè)試方法中調(diào)用:

    public function test(){

    //要更新的數(shù)據(jù)表的主鍵數(shù)組

    $where['ID']=array(70,73,74,80,83);

    //ID主鍵數(shù)組對(duì)應(yīng)的待更新數(shù)據(jù)

    $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數(shù)組

    echo "This is success :</br>";

    dump($f);

    echo 'ok';

    }else{

    //更新失敗操作

    echo "This is failed :</br>";

    dump($f);

    echo 'error';

    }

    }

    以上所述是小編給大家介紹的Thinkphp批量更新數(shù)據(jù)的方法匯總,希望對(duì)大家有所幫助

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:Thinkphp批量更新數(shù)據(jù)的方法匯總
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)