最近在做一个PHP项目,用到批量更新,没有找到现成的,自己写了一个,这样就省不少时间了:)
/**
* 批量更新* @param string $tableName 表名,不带前缀
* @param array[] $list 数据
* @author abiao <103277011@qq.com>
*/
public function updateAll($tableName,$list){
$ids = '';
foreach ($list as $data){
$ids .=','.$data['id'];
}
$ids=trim($ids,',');
$sql = "UPDATE ".M($tableName)->getTableName()." SET ";
$keys=array_keys($list[0]);
foreach( $keys as $k=>$v) {
if('id' == $v) unset($keys[$k]);
}
foreach ($keys as $key){
$tt=$key.'=case id';
foreach ($list as $data){
$tt.=' when '.$data['id'].' then \''.$data[$key].'\' ';
}
$sql.=$tt.' end,';
}
$sql=trim($sql,',');
$sql.= " WHERE id IN (".$ids.")";
return M($tableName)->execute($sql);
}