牛骨文教育服务平台(让学习变的简单)
博文笔记

thinkphp 同时更新多条数据

创建时间:2017-11-05 投稿人: 浏览次数:136


 有时候需要批量修改数据,如果循环修改单个,则会非常影响数据库连接量,比较好的方式就是拼接成一条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("数据已同步,无需重复写入");
        }





声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。