搜尋

首頁  >  問答  >  主體

數組 - php+mysql一次性更新?

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

代言代言2724 天前790

全部回覆(5)我來回復

  • 漂亮男人

    漂亮男人2017-06-12 09:21:49

    先寫一個陣列存放會員id和修改p值

    $vips = array(
        array(
            'id' => 1,
            'p' => 1
        ),
        array(
            'id' => 2,
            'p' => 2
        ),
        ...
    );
    foreach ($vips as $vip) {
        执行sql语句 update 会员表 set p  = $vip['p'] where id = $vip['id'];
    }

    回覆
    0
  • 欧阳克

    欧阳克2017-06-12 09:21:49

    目前採納的 @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`);

    回覆
    0
  • PHP中文网

    PHP中文网2017-06-12 09:21:49

    雷雷

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-06-12 09:21:49

    查出會員的id,一次修改。
    資料量大就分批次處理

    update table set p = value where uid in(1,2,3)
    1. 資料量小的放到循環裡也無所謂

    2. 具體看自己的需求

    回覆
    0
  • 世界只因有你

    世界只因有你2017-06-12 09:21:49

    我並沒看懂你的問題以後提問請描述清楚不然就是個垃圾問題
    我覺得你應該是想問撈出一部分會員一次性統一設置他們的p字段是吧
    `
    update table set p = value where uid in(1,2,3)
    `

    後面的where條件依照具體場景自己寫

    或你最好把你的問題重新描述下

    回覆
    0
  • 取消回覆