OBSERVAÇÃO # 1
O pedido está incorreto. O DECLARE chpoint INT(5)
deve ser depois de BEGIN
, não antes
delimiter //
CREATE PROCEDURE updatePoints(IN parentid INT(5),IN userid INT(5))
BEGIN
DECLARE chpoints INT(5);
SELECT points INTO chpoints FROM quiz_challenges WHERE id = parentid;
UPDATE quiz_users SET points = points + chpoints WHERE forumid=userid;
END;
//
delimiter ;
OBSERVAÇÃO # 2
Você deve ter certeza do seguinte para quiz_users
-
forum_id
está indexado
-
points
não está indexado (Isso mesmo, eu disse não indexado porque o valor seria incrementado e faria com que o BTREE para o índice daquela coluna misturasse o lugar dessa chave no índice).
OBSERVAÇÃO # 3
Se o script PHP estiver iterando parentid
e userid
valores, BIG OUCH !!!
Isso indicaria que uma sessão do navegador está fazendo viagens de ida e volta para alimentar cada chamada para o procedimento armazenado. Você deve pensar em passar todas as combinações parentid
e userid
em uma tabela e deixar o procedimento armazenado manipulá-lo no lado do servidor fazendo viagens de ida e volta a partir da sessão do navegador.