2012-02-13 5 views
0

Мне нужно изменить этот триггер, чтобы указать на только что обновленный столбец, так что я могу изменить NEW.song_id на ?? Благодаря!Quick MySQL Trigger Update

DROP TRIGGER IF EXISTS `ratings_update`// 
CREATE TRIGGER `ratings_update` AFTER UPDATE ON `ratings2` 
FOR EACH ROW update SONGS set 
rating_sum = rating_sum + NEW.rating, 
rating = rating_sum/rating_count 
where id = NEW.song_id 
// 

EDIT VVV

DROP TRIGGER IF EXISTS `ratings_upd`// 
CREATE TRIGGER `ratings_upd` AFTER UPDATE ON `ratings2` 
FOR EACH ROW update SONGS set 
rating_sum = rating_sum + NEW.rating - OLD.rating, 
rating_count = rating_count, 
rating = rating_sum/rating_count 
where id = NEW.song_id 
// 

Это то, что я придумал для своего запуска, но он бросает мне эту ошибку, когда я запускаю его ..

1064 - У вас ошибка в ваш синтаксис SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «// CREATE TRIGGER ratings_upd ПОСЛЕ UPDATE ON ratings2 для каждого обновления ROW» в строке 1

+0

Что значит «указывать на только что обновленную колонку»? «NEW» ссылается на новую запись после обновления, которая, кажется, то, о чем вы просите, поэтому я не уверен, какой ответ вы ищете. –

+0

Хорошо, я понимаю, но это, если кто-то обновляет свой предыдущий рейтинг, так это их способ получить доступ к их старому рейтингу, который обновился, поэтому я могу рассчитать rating_sum = rating_sum - OLD.rating + NEW.rating ?? Благодарю. –

+0

Ну, похоже, вы ответили на свой вопрос. Не будет 'rating_sum = rating_sum - OLD.rating + NEW.rating' делать то, что вы хотите? –

ответ

0

OLD обращается значения перед обновлением, и NEW доступ значения после обновления.

От http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html:

Вы можете ссылаться на столбцы в предметной таблице (таблица, связанная с триггером), используя псевдонимы старого и нового. OLD.col_name ссылается на столбец существующей строки перед ее обновлением или удалением. Имя NEW.col_ ссылается на столбец новой строки, которую нужно вставить, или на существующую строку после ее обновления.
+0

Спасибо за объяснение, можете ли вы проверить мой EDIT и посмотреть, знаете ли вы, что я делаю неправильно здесь –

+0

@NickNelson Вы настраиваете свой разделитель to //? Вам вообще не нужно менять разделитель для этого кода, попробуйте изменить // на;. –

+0

Я просто удалил капли, если существует часть, спасибо за вашу помощь, что она работает именно так, как я хочу сейчас –