php+mysql一次性更新?

发布于 2022-09-05 01:20:23 字数 102 浏览 16 评论 0

請問假設從數據庫中撈出會員資料
會員有個字段假設叫做 p
每個會員的 p 都會有值
我想做一個我可以「一次把所有會員中的p值做修改」
我php後端處理該怎麼下才對?!

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

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

发布评论

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

评论(5

暖心男生 2022-09-12 01:20:23

先写一个数组存放会员id和修改p值

$vips = array(
    array(
        'id' => 1,
        'p' => 1
    ),
    array(
        'id' => 2,
        'p' => 2
    ),
    ...
);
try {
    $transaction = $DB->start_delegated_transaction();
    foreach ($vips as $vip) {
        执行sql语句 update 会员表 set p  = $vip['p'] where id = $vip['id'];
    }
    $transaction->allow_commit();
} catch (Exception $e) {
    $transaction->rollback($e);
    throw $e;
}
不必在意 2022-09-12 01:20:23

目前采纳的 @tony_yin 的方案是最基本的方案。在实际应用中要注意在for循环开始前要开启transaction,结束后提交transaction。否则性能低不说,如果在for循环过程中程序出现问题很容易导致只有一部分用户的p值更新了,另一部分却没有更新。

我这里补充另外一个方案:既然是mysql,那么可以使用 INSERT ... ON DUPLICATE KEY UPDATE 的批量更新的方式。示例SQL:

INSERT INTO `user`
 ( `id`, `p` ) 
VALUES
 ( 11111, 1),
 ( 22222, 2),
 -- ...
 ( 99999, 9)
ON DUPLICATE KEY UPDATE
  `id` = VALUES(`id`),
  `p` = VALUES(`p`);
余生再见 2022-09-12 01:20:23
update 会员表 set p = xxx
嘿咻 2022-09-12 01:20:23

查出会员的id,一次修改。
数据量大就分批次处理

update table set p = value where uid in(1,2,3)
  1. 数据量小的放到循环里也无所谓

  2. 具体看你自己的需求

伪心 2022-09-12 01:20:23

我并没看懂你的问题 以后提问请描述清楚 不然就是个垃圾问题
我觉得你应该是想问捞出一部分会员 一次性统一设置他们的p字段是吧
`
update table set p = value where uid in(1,2,3)
`

后面的where条件根据具体场景自己写

或者你最好把你的问题重新描述下

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