MySQL-3更新需要在过程中逐个运行

MySQL-3更新需要在过程中逐个运行,mysql,stored-procedures,Mysql,Stored Procedures,我必须在一个过程中运行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_pt

我必须在一个过程中运行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

对不起,我不明白你的问题!您当前存储的进程有什么问题?你一个接一个地执行这些语句是什么意思?出于某种原因,我的第二次和第三次更新没有完成。。。但我已经做了斯拉克索的建议和它的工作。谢谢