1. /**
  2. * @param $table 表名
  3. * @param array $multipleData 拼接的批量更新的数组格式:
  4. * $students = [[‘id’ => 1, ‘city_id’ => ‘100010’],[‘id’ => 2, ‘city_id’ => ‘100011’],];
  5. *拼接后语句:UPDATE base_info SET `city_id` = CASE WHEN `id` = 1 THEN 100010 WHEN `id` = 2 THEN 100011 ELSE `city_id` END WHERE `id` IN (1,2)
  6. * @return false|int
  7. */
  8. function updateBatch($tableName,$multipleData = [])
  9. {
  10. try {
  11. if (empty($multipleData)) {
  12. info("批量更新数据为空");
  13. return false;
  14. }
  15. $firstRow = current($multipleData);
  16. $updateColumn = array_keys($firstRow);
  17. // 默认以id为条件更新,如果没有ID则以第一个字段为条件
  18. $referenceColumn = isset($firstRow['id']) ? 'id' : current($updateColumn);
  19. unset($updateColumn[0]);
  20. // 拼接sql语句
  21. $updateSql = "UPDATE " . $tableName . " SET ";
  22. $sets = [];
  23. $bindings = [];
  24. foreach ($updateColumn as $uColumn) {
  25. $setSql = "`" . $uColumn . "` = CASE ";
  26. foreach ($multipleData as $data) {
  27. $setSql .= "WHEN `" . $referenceColumn . "` = ? THEN ? ";
  28. $bindings[] = $data[$referenceColumn];
  29. $bindings[] = $data[$uColumn];
  30. }
  31. $setSql .= "ELSE `" . $uColumn . "` END ";
  32. $sets[] = $setSql;
  33. }
  34. $updateSql .= implode(', ', $sets);
  35. $whereIn = collect($multipleData)->pluck($referenceColumn)->values()->all();
  36. $bindings = array_merge($bindings, $whereIn);
  37. $whereIn = rtrim(str_repeat('?,', count($whereIn)), ',');
  38. $updateSql = rtrim($updateSql, ", ") . " WHERE `" . $referenceColumn . "` IN (" . $whereIn . ")";
  39. info($updateSql);
  40. // 传入预处理sql语句和对应绑定数据
  41. return DB::update($updateSql, $bindings);
  42. } catch (\Exception $e) {
  43. info($e->getMessage());
  44. return false;
  45. }
  46. }

参考:https://blog.csdn.net/byywcsnd/article/details/78231429

php批量更新多条数据的更多相关文章

  1. mysql根据查询结果批量更新多条数据(插入或更新)

    mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...

  2. mysql语句:批量更新多条记录的不同值[转]

    mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 帮助 1 UPDATE mytable SET myfield = 'value' WHERE ...

  3. mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = ...

  4. mysql语句:批量更新多条记录的不同值

    mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 1 UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_va ...

  5. .Net中批量更新或添加数据

    方法一:使用SqlBulkCopy实现批量更新或添加数据. SqlBulkCopy类一般只能用来将数据批量插入打数据库中,如果数据表中设置了主键,出现重复数据的话会报错,如果没有设置主键,那么将会添加 ...

  6. mysql 批量更新与批量更新多条记录的不同值实现方法

    作者: 字体:[增加 减小] 类型:转载 时间:2013-10-02 我要评论 在mysql中批量更新我们可能使用update,replace into来操作,下面小编来给各位同学详细介绍mysql ...

  7. mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法

    mysql 批量更新与批量更新多条记录的不同值实现方法 在mysql中批量更新我们可能使用update,replace into来操作,下面详细介绍mysql批量更新与性能. 批量更新 mysql更新 ...

  8. 【转】【MySql】Update批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other ...

  9. 转载 【MySql】Update批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other ...

  10. ADO.NET - 批量更新或添加数据

    方法一:使用SqlBulkCopy实现批量更新或添加数据. SqlBulkCopy类一般只能用来将数据批量插入打数据库中,如果数据表中设置了主键,出现重复数据的话会报错,如果没有设置主键,那么将会添加 ...

随机推荐

  1. echarts常见问题及解决方法

    https://blog.csdn.net/weixin_46928381/article/details/122875609

  2. nextTick使用

  3. VS2019 16.8下载安装

    昨天,想升级到 net5版本,发现在vs2019上始终发现不了它,考虑好几个小时,终于狠下心,把vs2019卸载了,重新装一次.耗费了一个晚上,先将安装过程写下来,以供参考 第一步, 到 微软官网 h ...

  4. STM32CubeMX教程20 SPI - W25Q128驱动

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  5. VSCode + GCC编译器(MinGW)开发环境中文字符乱码问题踩坑与解决办法

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  6. blender 3D 汽车模型下载

    前言 因为之前需要模拟摄像头拍摄汽车车牌,从各种途径下载了一些blender 3D 汽车模型,现将模型分享出来,如有需要,直接去最后面下载地址下载即可 目前已经车型40多款 车型图 70年代Porsc ...

  7. [转帖]AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1)

    AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1) 适用于: Oracle Database Cloud Schema Service - 版本 N/A ...

  8. [转帖]Jmeter_jmeter-plugins插件的安装使用

    一.安装JMter Plugins 1.官网下载 JMeter Plugins 的jar包 2. 将下载的jar包复制到 %JMETER_HOME%\lib\ext 目录下 3. 启动 JMeter ...

  9. 【转帖】SQUID TIME_WAIT值过高引起的服务器被拖慢

    https://www.diewufeiyang.com/post/895.html 查看TCP的连接状态值: # netstat -n | awk '/^tcp/ {++S[$NF]} END {f ...

  10. [转帖]Intel固态硬盘总结

    https://www.cnblogs.com/hongdada/p/17326247.html 2012年推出的S3700,采用的是25nm闪存颗粒. 2015年推出s3710,采用的是20nm闪存 ...