請問假設從數據庫中撈出會員資料會員有個字段假設叫做 p每個會員的 p 都會有值我想做一個我可以「一次把所有會員中的p值做修改」我php後端處理該怎麼下才對?!
先寫一個陣列存放會員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']; }
目前採納的 @tony_yin 的方案是最基本的方案。在實際應用程式中要注意在for迴圈開始前要開啟transaction,結束後要提交transaction。否則效能低不說,如果在for迴圈過程中程式出現問題很容易導致只有一部分使用者的p值更新了,另一部分卻沒有更新。
我在這裡補充另一個方案:既然是mysql,那麼可以使用 INSERT ... ON DUPLICATE KEY UPDATE 的批量更新的方式。範例SQL:
INSERT ... ON DUPLICATE KEY UPDATE
INSERT INTO `user` ( `id`, `p` ) VALUES ( 11111, 1), ( 22222, 2), -- ... ( 99999, 9) ON DUPLICATE KEY UPDATE `id` = VALUES(`id`), `p` = VALUES(`p`);
雷雷
查出會員的id,一次修改。 資料量大就分批次處理
update table set p = value where uid in(1,2,3)
資料量小的放到循環裡也無所謂
具體看自己的需求
我並沒看懂你的問題以後提問請描述清楚不然就是個垃圾問題我覺得你應該是想問撈出一部分會員一次性統一設置他們的p字段是吧`update table set p = value where uid in(1,2,3)`
後面的where條件依照具體場景自己寫
或你最好把你的問題重新描述下
先寫一個陣列存放會員id和修改p值
目前採納的 @tony_yin 的方案是最基本的方案。在實際應用程式中要注意在for迴圈開始前要開啟transaction,結束後要提交transaction。否則效能低不說,如果在for迴圈過程中程式出現問題很容易導致只有一部分使用者的p值更新了,另一部分卻沒有更新。
我在這裡補充另一個方案:既然是mysql,那麼可以使用
INSERT ... ON DUPLICATE KEY UPDATE
的批量更新的方式。範例SQL:雷雷
查出會員的id,一次修改。
資料量大就分批次處理
資料量小的放到循環裡也無所謂
具體看自己的需求
我並沒看懂你的問題以後提問請描述清楚不然就是個垃圾問題
我覺得你應該是想問撈出一部分會員一次性統一設置他們的p字段是吧
`
update table set p = value where uid in(1,2,3)
`
後面的where條件依照具體場景自己寫
或你最好把你的問題重新描述下