欢迎您访问我的笔记本站旨在于记录一些平时工作中遇到的一些问题和解决方法,方便查阅,部分内容来源于网络,如有侵权请联系我删除
  • 微信微信
您现在的位置是:首页 > Mysql

Mysql批量修改-[原创]

日期:2021-03-19 15:06:44 作者:tanyi 来源:我的笔记 浏览:679 次
日常工作有时需要大批量修改数据,很多时候数据量小比如几条数据有人可能会直接循环执行sql去修改,但是当需要修改的数据对象数量很多时这时这种方法并不可行。因为mysql支持一条语句就可以修改这些数据。

框架一般没有提供批量操作的方法,所以需要自己拼接sql语句然后执行,由于每次遇到批量修改都是临时写方法去拼接sql,浪费时间,这里记录下来,以后直接拿来用。

/**
 * @param array $data 修改数据包(二维数组)
 * @param string $id 条件,一般为主键
 * @param string $table 表名
 * @return string
 * UPDATE categories SET
display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
WHEN 3 THEN 'New Title 3'
END
WHERE id IN (1,2,3)
 */
function create_update_sql($data=[],$id='',$table=''){
    if(empty($data) || !strlen($id) || !strlen($table)) return '';
    $id_str=implode(',',array_column($data,$id));
    $keys = array_keys(current($data));
    $sql="UPDATE {$table} SET";
    foreach ($keys as $vol) {
        if($vol==$id) continue;
        $sql.=" {$vol} = CASE {$id}";
        foreach($data as $vo){
            $sql.=" WHEN {$vo[$id]} THEN {$vo[$vol]}";
        }
        $sql.=' END,';
    }
    $sql=substr($sql,0,-1)." WHERE {$id} IN ({$id_str})";
    return $sql;
}


提交评论
评论列表