php+mysql批量更新数据
浏览量:401
每一个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;
}
神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。