gpt4 book ai didi

MySQL - 3 个更新需要在程序中 1 个 1 个运行

转载 作者:行者123 更新时间:2023-11-29 15:19:30 25 4
gpt4 key购买 nike

我必须在一个过程中运行 3 个更新。当我在 php 中称它们为“再见一”时,我的 3 个独立更新工作得很好,但我想让它们重新组合以仅执行一次调用。我的程序是

create
definer = root@localhost procedure UpdateScorePredictionParticipant(IN predPts int(10), IN predId int(10), IN partId int(10))
BEGIN
UPDATE predictions
SET pred_pts = @predPts
WHERE pred_game_id = @predId and participant_id = @partId;

UPDATE ranking
SET pts_wildcard = (SELECT sum(pred_pts)
FROM predictions
INNER JOIN games g on predictions.pred_game_id = g.id
WHERE predictions.participant_id = @partId)
WHERE participant_id = @partId;

UPDATE ranking
SET total = (pts_wildcard+pts_conference+pts_division+pts_pred_sb+pts_sb)
WHERE participant_id = @partId;

END;

我怎样才能在同一个调用中一一执行这 3 个更新。

谢谢

最佳答案

当您更新 3 个不同的表时,您将需要执行三个单独的更新。但是,如果将它们放入过程中,则只需从 PHP 代码中调用该过程即可。

要修复过程代码,请从使用的参数名称中删除 @

给参数添加前缀也是一个好习惯,这样它们就不会与列名混淆。

您可以做的最后一件事是在过程中使用事务,以便所有更新完成,或者如果其中一些更新失败,则所有更新都不会完成。这保证了操作的原子性。

create procedure UpdateScorePredictionParticipant(
in_predPts int,
in_predId int,
in_partId int
)
BEGIN

START TRANSACTION;

UPDATE predictions
SET pred_pts = in_predPts
WHERE pred_game_id = in_predId and participant_id = in_partId;

UPDATE ranking
SET pts_wildcard = (
SELECT sum(pred_pts)
FROM predictions
INNER JOIN games g on predictions.pred_game_id = g.id
WHERE predictions.participant_id = in_partId
)
WHERE participant_id = in_partId;

UPDATE ranking
SET total = (pts_wildcard+pts_conference+pts_division+pts_pred_sb+pts_sb)
WHERE participant_id = in_partId;

COMMIT;

END

关于MySQL - 3 个更新需要在程序中 1 个 1 个运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59460042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com