晓夏

北漂的女孩

Good Luck To You!

php+mysql批量更新数据

浏览量:395

每一个PHP开发工程师都会遇见一下更新很多数据的时候,现在福利来了,我也遇见了一个批量更新数据时候,

然后自己封装了一个方法,但是更新的格式需要确定一下

array(1) {
  [21]=>
  array(3) {
    ["ranking"]=>
    string(14) "WHEN 21 THEN 1"
    ["last_ranking"]=>
    string(14) "WHEN 21 THEN 1"
    ["modify_time"]=>
    string(23) "WHEN 21 THEN 1509616809"
  }
}

php批量更新mysql的方法:

/**
 * 批量更新数据
 * @param $data  要分割的数据
 * @param $table  表名字
 * @param int $len   分割的长度
 * @return array
 * author        :lianghuiju
 * function_name : moreUpdate
 * description   :
 */
function moreUpdate($data,$table,$len=50){
    $idArray = array();
    $tmp1Array = array();
    $tmp2Array = array();
    $tmp3Array = array();
    $field1 = 'ranking';
    $field2 = 'last_ranking';
    $field3 = 'modify_time';
    $sql = array();
    $str = "UPDATE $table SET %s = CASE id
                    %s
                END,
                %s = CASE id
                    %s
                END,
                %s = CASE id
                    %s
                END
            WHERE id IN (%s)";

    foreach($data as $key=>$val){
        $idArray[] = $key;
        $tmp1Array[] = $val[$field1];
        $tmp2Array[] = $val[$field2];
        $tmp3Array[] = $val[$field3];
    }
    $idArray = array_chunk($idArray,$len);
    $tmp1Arrays = array_chunk($tmp1Array,$len);
    $tmp2Arrays = array_chunk($tmp2Array,$len);
    $tmp3Arrays = array_chunk($tmp3Array,$len);
    foreach($tmp1Arrays as $key=>$val){
        $ids = implode(',',$idArray[$key]);
        $tmp1 = implode(' ',$tmp1Arrays[$key]);
        $tmp2 = implode(' ',$tmp2Arrays[$key]);
        $tmp3 = implode(' ',$tmp3Arrays[$key]);
        $sql[] = sprintf($str,$field1,$tmp1,$field2,$tmp2,$field3,$tmp3,$ids);
    }
    return $sql;
}










神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。