首页 > 数据库 >sql批量更新

sql批量更新

时间:2024-02-05 20:13:45浏览次数:21  
标签:province 批量 triggerData value updateValueSql IpCity 更新 sql id

/**
 * 数据用sql批量更新
 *
 * @param [type] $tableName     表名,包含表前缀
 * @param [type] $updateData	待更新数据列表
 * @param [type] $updateField  	更新字段数组列表,顺序需要与数据列表一致
 * @param [type] $whereId		更新条件,id、order_sn等
 * @return void
 */
public function sqlBatchUpdate($tableName, $updateData, $updateField, $whereId)
{
    $updateValueSql = '';
    $updateIdSql = '';
    $updateKey = $updateField;
    foreach ($updateKey as $key) {
        $n = 0;
        foreach ($updateData as $value) {
            $n++;
            if ($n == 1) {
                $updateValueSql .= $key . " = CASE $whereId ";
            }
            $updateValueSql .= 'WHEN \'' . $value[$whereId] . '\' THEN \'' . $value[$key] . '\'';
            if ($n != count($updateData)) {
                $updateValueSql .= " ";
            } else {
                $updateValueSql .= " END,";
            }
        }
    }
    $updateValueSql = substr($updateValueSql, 0, strlen($updateValueSql) - 1);
    $n = 0;
    foreach ($updateData as $value) {
        $n++;
        if ($n == 1) {
            $updateIdSql .= "(";
        }
        $updateIdSql .= ' \'' . $value[$whereId] . '\' ';
        if ($n != count($updateData)) {
            $updateIdSql .= ",";
        } else {
            $updateIdSql .= ")";
        }
    }
    if (count($updateData)) {
        $update_sql = 'UPDATE ' . $tableName . ' SET ' . $updateValueSql . ' WHERE ' . $whereId . ' IN ' . $updateIdSql . ';';
        Db::query($update_sql); // 执行更新语句
    }
}

  

    // 根据ip查询省市区
    public function getIpArea()
    {
        $map[] = ['browse_ip', '<>', ''];
        $list = AppDownload::build()
            ->where($map)
            ->where('province',null)
            ->order('id desc')
            ->limit(20)
            ->field('id,browse_ip')
            ->select()
            ->toarray();

        $updateTriggerArray = [];
        foreach ($list as $key => $value) {
            $IpCity = getQqwryArea($value['browse_ip']);
            if ($IpCity) {
                $triggerData['id'] = $value['id'];
                $triggerData['province_id'] = $IpCity['province_id'];
                $triggerData['city_id'] = $IpCity['city_id'];
                $triggerData['district_id'] = $IpCity['district_id'];
                $triggerData['province'] = $IpCity['province'];
                $triggerData['city'] = $IpCity['city'];
                $triggerData['district'] = $IpCity['district'];
                $updateTriggerArray[] = $triggerData;
            }
        }

        // sql语句批量更新
        if ($updateTriggerArray) {
            $tableName = 'jy_app_download';
            $updateField = ['province_id', 'city_id', 'district_id', 'province', 'city', 'district'];
            $this->sqlBatchUpdate($tableName, $updateTriggerArray, $updateField, 'id');
        }
        return true;
    }

  

标签:province,批量,triggerData,value,updateValueSql,IpCity,更新,sql,id
From: https://www.cnblogs.com/seanpan/p/18008734

相关文章

  • MySQL存储引擎-InnoDB行格式
    MySQL存储引擎-InnoDB行格式mysql作为一款主流的关系型数据库,是以记录为单位向表中插入数据的。目前为止,Innodb共支持COMPACT、REDUNDANT、DYNAMIC、和COMMPRESSED四种行格式。在MySQL5.7及以上版本,默认采用DYNAMIC格式。DYNAMIC与COMPACT格式基本一致,下文中我们会介绍区别。因......
  • 修改SQLServer的TEMPDB路径
    数据库服务器上,SQLServer安装在C盘,导致C盘空间不足,每次都清理也释放不出来多少,经检查发现,安装目录下的tempdb.mdf有10多个G,随寻思把tempdb迁移到别的盘符。具体操作步骤如下:1、先在E盘建个目录tempdb;2、打开sqlserver管理界面,执行以下脚本ALTERDATABASEtempdbMODIFYFILE(N......
  • ubuntu中Postgresql备份恢复及高版本恢复数据到低版本库中
    一、备份基本使用可以使用pg_dump和pg_dumpall命令来进行备份操作。pg_dump:备份指定数据库pg_dumpall:备份所有数据库我这里只用到了pg_dump命令,pg_dumpall也是大同小异,大家自己摸索一下我们直接看一下备份的命令吧,pg_dump-hlocalhost-Upostgres-d数据库名称......
  • 【面试突击】数据库面试实战-SQL 优化(加更)
    欢迎关注公众号【11来了】,及时收到AI前沿项目工具及新技术的推送!在我后台回复「资料」可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!MySQL中的SQL优化这里主要说一下MySQL中如何对SQL进行优化,其实主要还是根据索引来进行优化的,如果好好了解下边的SQL......
  • KingbaseES批量创建50个用户及删除用户
    一、创建函数批量创建50个用户CREATEORREPLACEFUNCTIONcreate_bulk_users()RETURNSVOIDAS$$DECLAREcounterINT:=1;BEGINWHILEcounter<=50LOOP--使用CONCAT函数生成动态的用户名和密码EXECUTECONCAT('CREATEUSERuser',counter,'WI......
  • PowerDesigner 导出mysql
    首先打开powerdesigner,可以通过文件打开一个项目或者直接双击项目通过powerdesigner进行打开。修改导出数据库类型。点击工具栏上的“Database”,选择“ChangeCurrentDBMS”进行修改导出脚本类型,可以选择mysql、sqlserver/oracle、db2等主流的数据库。在DBMS中点击下拉菜单,选择......
  • MySQL常用图形管理工具
    MySQL图形化管理工具极大地方便了数据库的操作与管理,常用的图形化管理工具有MySQLWorkbench、phpMyAdmin、Navicat、MySQLDumper、SQLyog、MySQLODBCConnector。其中,phpMyAdmin和Navicat提供中文操作界面;MySQLWorkbench、MySQLODBCConnector、MySQLDumper为英文界面。下......
  • MySql聚集索引和非聚集索引的区别
    MySql中的聚集索引和非聚集索引主要体现在以下几个方面:1.存储方式:聚集索引的叶子节点存储的是整行数据,非聚集索引叶子节点存储的是键值和整行的标识。2.索引结构:聚集索引的索引结构于数据表的物理结构相同,非聚集索引的索引结构与数据表的物理结构不同。   在数......
  • sql server生成时间序列
    DECLARE@startDateDATE='2024-01-01';--定义结束日期DECLARE@endDateDATE=DATEADD(DAY,365,@startDate)--生成日期序列;WITHDateSequenceAS(SELECT@startDateAS[Date],1AS[DayNumber]UNIONALLSELECTDATEADD(DAY,1,[Date]......
  • oracle常用sql
    --备份tbluser的数据到tbluser_bak中createtabletbluser_bakasselect*fromtbluser;--此处不加as也行--删除备份表的数据truncatetabletbluser_bak;--还原表数据insertintotbluser_bakselect*fromtbluser;--查看数据是否恢复select*fromtbluser_bak;-......