private function doBatchModify($data = [], $table = '')
{
$tableModel = M("{$table}");
if (count($data) == 0 || empty($table)) exit('參數缺少');
//獲取所有的id
$data_keys = array_keys($data);
$col = $tableModel->query("SHOW COLUMNS FROM {$table}");
$cols = [];
array_map(function ($value) use (&$cols) {
$cols[] = $value['field'];
}, $col);
//拼接批量更新sql語句
$sql = "UPDATE {$table} SET ";
//合成sql語句
foreach ($data[$data_keys[0]] as $key => $value) {
if (!in_array($key, $cols)) continue;
$sql .= "{$key} = CASE id ";
foreach ($data as $k => $v) {
$sql .= sprintf("WHEN %d THEN '%s' ", $k, $v[$key]);
}
$sql .= "END, ";
}
//把最後一個,去掉
$sql = substr($sql, 0, strrpos($sql, ','));
//合併所有id
$ids = implode(',', $data_keys);
//拼接sql
$sql .= " WHERE id IN ({$ids})";
//var_dump($sql);
$resNum = $tableModel->execute($sql);
return $resNum;
}
$data = array(
11 => array('title' => '語文', 'score' => 135),
12 => array('title' => '數學', 'score' => 145),
13 => array('title' => '英文', 'score' => 140)
);
$table = 'exam';
$this->doBatchModify($data, $table);