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

发布于 2022-09-05 09:59:02 字数 438 浏览 14 评论 0

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

So尛奶瓶 2022-09-12 09:59:02

replace into

天涯沦落人 2022-09-12 09:59:02

(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

唯憾梦倾城 2022-09-12 09:59:02

在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,
 ...
灯角 2022-09-12 09:59:02

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文