1. 在模块下的Common 文件夹下建 function.php
<?php
/*
批量更新
@ $table_name 表名全名
@ data 更新的数据 二位数组
@ 返回执行行数
@ 老-猫 2017-08-02
*/
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()->execute($sql);
//$res =$sql;
return $res;
}
2. 在控制器中测试
/*测试 批量更新 放在控制器中
tes_ 表前缀*/
/*public function saveAll_test(){
$update_array=array();
for ($i=1; $i <6 ; $i++) {
$data=array();
$data['id']=$i;
$data['agent_name']='说的什么';
$data['adderss'] = '我是收货地址请查看';
$update_array[]=$data;
}
dump($update_array);
$sql=batch_update('tes_agent_ship',$update_array,id);
//dump($res);
// 拼接后的语句
// UPDATE tes_agent_ship set agent_name = (CASE id WHEN '1' THEN '说的什么啊1' WHEN '2' THEN '说的什么啊2' end) where id in(1,2)
}*/