thinkphp 同时更新多条数据
有时候需要批量修改数据,如果循环修改单个,则会非常影响数据库连接量,比较好的方式就是拼接成一条sql,一次执行
/** * 批量更新 * @param [arr] $datas [要保存的数据集] * $data[] = array("id"=>1,"value"=>value1); $data[] = array("id"=>2,"value"=>value2); $data[] = array("id"=>3,"value"=>value3); * @param [string] $database_table_name [数据库表名] * @param [string] $primary_key [主键名] * @return [int] [成功修改的条数] */ function dbSaveAll($datas, $database_table_name, $primary_key){ $sql = ""; //Sql $lists = []; //记录集$lists $pk = $primary_key;//获取主键 foreach ($datas as $data) { foreach ($data as $key=>$value) { if($pk===$key){ $ids[]=$value; }else{ $lists[$key].= sprintf("WHEN %u THEN "%s" ",$data[$pk],$value); } } } foreach ($lists as $key => $value) { $sql.= sprintf("`%s` = CASE `%s` %s END,",$key,$pk,$value); } $sql = sprintf("UPDATE __%s__ SET %s WHERE %s IN ( %s )",strtoupper($database_table_name),rtrim($sql,","),$pk,implode(",",$ids)); return M()->execute($sql); }调用
// 保存到数据库 $result = dbSaveAll($vote_projects, "Vote_project", "order_number"); if($result){ $this->success("写入成功!", __APP__ . "/Admin/Vote/get_all_pro"); } else { $this->error("数据已同步,无需重复写入"); }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。