2017-01-22 2 views
0

Я пытаюсь получить ячейку Points_Per_Game для вычисления с помощью триггера в MySQL, но не уверен, что мне не хватает.MySQL Trigger Sum on Update

Points_Per_Game = Total_Points/Games Played, 


DELIMITER $$ 
CREATE TRIGGER trg_Point_Per_Game 
AFTER UPDATE ON Players 
FOR EACH ROW 
BEGIN 
UPDATE Players SET Points_Per_Game = Total_Points/Games_Played; 
END;$$ 
DELIMITER; 

Игроки Таблица:

+------------+--------------+--------------+-----------------+ 
| Name  | Games_Played | Total_Points | Points_Per_Game | 
+------------+--------------+--------------+-----------------+ 
| David  |   0 |   0 |   NULL | 
| John  |   6 |   7 |   NULL | 

В Games_Played и Total_Points колонны обновляется еженедельно через Баш скрипт.

ответ

0

Вы хотите до обновления триггера, и вам необходимо обратиться к данным в строке:

DELIMITER $$ 
CREATE TRIGGER trg_Point_Per_Game 
BEFORE UPDATE ON Players 
FOR EACH ROW 
BEGIN 
    SET new.Points_Per_Game = (CASE WHEN new.Games_Played > 0 THEN new.Total_Points/new.Games_Played ELSE 0 END); 
END;$$ 
DELIMITER; 
+0

Он вошел правильно, спасибо. Моя проблема в том, что когда я обновляю Games_Played и Total_Points, я получаю эту ошибку: «Невозможно обновить таблицу« Игроки »в хранимой функции/триггере, потому что она уже используется оператором, который вызвал эту сохраненную функцию/trigger.' – denski

+0

@ denski. , , Вы должны изменить свой вопрос (или задать другой вопрос), показывая код, который выполняет обновление, и любые другие триггеры в таблице. –

+0

Это сработало, у меня было две проблемы. 1) У меня было два триггера с одним и тем же триггером. 2) Я бы установил DECIMAL (3,3), чтобы он не позволял значениям, которые обновлялись больше 0. – denski