批量更新只适用于一个字段的更新,原理是用自定义函数拼接sql语句,然后再执行sql语句.

  

  1. //数据
  2. $data[] = array('id'=>1,'value'=>value1);
  3. $data[] = array('id'=>2,'value'=>value2);
  4. $data[] = array('id'=>3,'value'=>value3);
  5. $this->saveAll($data,表名);

  

  1. //生成的sql语句结构
  2. UPDATE categories
  3. SET display_order = CASE id
  4. WHEN 1 THEN 3
  5. WHEN 2 THEN 4
  6. WHEN 3 THEN 5
  7. END
  8. WHERE id IN (1,2,3)
  1. //批量更新
  2. public function saveAll($datas,$model){
  3. $model || $model=$this->name;
  4. $sql   = ''; //Sql
  5. $lists = []; //记录集$lists
  6. $pk    = $this->getPk();//获取主键
  7. foreach ($datas as $data) {
  8. foreach ($data as $key=>$value) {
  9. if($pk===$key){
  10. $ids[]=$value;
  11. }else{
  12. $lists[$key].= sprintf("WHEN %u THEN '%s' ",$data[$pk],$value);
  13. }
  14. }
  15. }
  16. foreach ($lists as $key => $value) {
  17. $sql.= sprintf("`%s` = CASE `%s` %s END,",$key,$pk,$value);
  18. }
  19. $sql = sprintf('UPDATE __%s__ SET %s WHERE %s IN ( %s )',strtoupper($model),rtrim($sql,','),$pk,implode(',',$ids));
  20. return M()->execute($sql);
  21. }

Thinkphp 批量更新方法 saveALL的更多相关文章

  1. mybatis的一种批量更新方法【我】

    接手一个项目,项目主要架构用的 servlet 3.0 + spring + mybatis 其中发现一个问题: 操作数据时,批量插入可以,批量更新,使用各种写法都无法成功,直接报 mybatis转换 ...

  2. sql server update 的批量更新方法

    假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是ProductPrice表,我们要将ProductPrice表中的价格字段Price更新为Price表中 ...

  3. MySql批量更新方法

    准备数据 表 user(用户).dept(部门) 1:更新符合单个条件的某个字段的一条数据 update user u set u.name = '测试' where u.id = "&qu ...

  4. tp5 中 model 的更新方法

    // 过滤非数据表字段更新 public function update(Request $request){ $user = model('User'); $result = $user -> ...

  5. 利用pip批量更新python库

    如果python库比较旧,需要更新到最新版本,可以利用pip工具. DOS命令行下,输入pip -V查看pip版本,可以先把pip更新到新版本. 查看系统里过期的python库 pip list #列 ...

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

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

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

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

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

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

  9. c#mysql批量更新的两种方法

    总体而言update 更新上传速度还是慢. 1:  简单的insert  速度稍稍比MySqlDataAdapter慢一点 配合dapper 配置文件 <?xml version="1 ...

随机推荐

  1. 【146】ArcObjects类库索引

    ArcObjects 类库(一) ----------------------------------------------------------------------------------- ...

  2. 两个局域网(办公网-IDC)安全互通方案2:by GRE and linux server&深入理解GRE

    (0)gre的turnel的打通 1. 这个过程就是双方建立turnel的过程.           (1)局域网路由过程 1.主机A发送一个源为192.168.1.2,目的为10.1.1.2的包 ( ...

  3. 如何成为一名牛逼的C/C++程序员?

    每一个学技术的人 都想干个三五年就能成为大牛 跳槽去大厂,薪水翻番 或者在一个小公司里,带个小团队 在30岁左右成为项目经理 晋升管理层 买房买车,实现人生理想 然而技术之路漫漫 想要成为牛×的程序员 ...

  4. Linux C编程之二:Linux基础

    1.Linux的特点 (1)Linux就是一个操作系统(作为用户和计算机之间接口的软件程序) 注:操作系统的功能:命令解释,进程管理,内存管理,输入输出(I/O)操作和外围设备管理,文件管理 (2)特 ...

  5. OpenGL 2D模式

    // // left top 这里设置的默认是左上角 // void push_view2d(int left, int top, int width, int height) { //glPushA ...

  6. Mybatis Generator插件升级版

    一.目的: 1. *mapper.java 文件名称 改为*DAO.java2. mapper以及mapper.xml 重复执行,只会覆盖原模板方法,不会覆盖自定义方法3. 实体类添加中文注释 二.步 ...

  7. 1.2Hello, World!的大小

    描述 还记得在上一章里,我们曾经输出过的“Hello, World!”吗? 它虽然不是本章所涉及的基本数据类型的数据,但我们同样可以用sizeof函数获得它所占用的空间大小. 请编程求出它的大小,看看 ...

  8. 9i 和 11 g 区别

    9i 和 11 g 区别 9i 不支持 2/4/8G,只支持 2000/4000/8000 M的

  9. Objective-C设计模式——中介者Mediator(对象去耦)

    中介者模式 中介者模式很好的诠释了迪米特法则,任意两个不相关的对象之间如果需要关联,那么需要通过第三个类来进行.中介者就是把一组对象进行封装,屏蔽了类之间的交互细节,使不同的类直接不需要持有对方引用也 ...

  10. 逻辑回归(Logistic Regression)推导

    出自BYRans博客:http://www.cnblogs.com/BYRans/ 本文主要讲解分类问题中的逻辑回归.逻辑回归是一个二分类问题. 二分类问题 二分类问题是指预测的y值只有两个取值(0或 ...