Yii2使用一条sql语句批量更新而非循环插入,如何实现?

Yii实现了如下的批量插入方式,如果是批量更新Yii2有没有相同的实现方式呢?


Yii::$app->db
    ->createCommand()
    ->batchInsert($table, $columns, $rows)
    ->execute();

批量更新是使用一条SQL语句实现批量更新,而非循环的更新的方式,e.g:

UPDATE order
    SET field = CASE order_no
        WHEN 1 THEN 'value'
        WHEN 2 THEN 'value'
        WHEN 3 THEN 'value'
    END
WHERE order_no IN (1,2,3)
阅读 11k
4 个回答

replace into

(Update t_user set name='aa' where 1=1)a union ALL
(Update t_user set name='bb' where 1=2)a union ALL
(Update t_user set name='cc' where 1=3)a union ALL
合并sql语句, 用循环字符串,组成一条SQL语句,一次执行,提高sql的效率。循环的效率,就用不了多少了比起sql

在Yii上面我没有找到了类似的实现方式,但我还是改用临时表的方式来做批量更新

  • 把需要批量更新数据先批量插入到一个临时表

    Yii::$app->db
    ->createCommand()
    ->batchInsert($table, $columns, $rows)
    ->execute();
  • 然后采用拼接SQL的方式更新,SQL语句如下

 UPDATE order a INNER JOIN order_temp t ON t.`order_no`=a.`order_no` SET
 a.attribute1=t.attribute1,
 a.attribute2=t.attribute2,
 ...
新手上路,请多包涵

Yii::$app->db
->createCommand()
->batchInsert($table, $columns, $rows)
->execute();
同意这个

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题