用case when语句写的一个批量更新函数updateAll

最近在做一个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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值