MySQL Trigger не обновляет таблицу - PullRequest
0 голосов
/ 19 февраля 2012

Я создал следующий триггер в базе данных MySQL. Это для звездной рейтинговой системы. Всякий раз, когда строка добавляется в таблицу оценок, она должна добавляться в таблицу Rating_totals.

DELIMITER$$

create trigger update_vote_after_insert_trig before insert 
on ratings
for each row begin 
if bookID = new.bookID then
update ratings_totals set 
total_votes = total_votes + 1,
total_rating = total_rating + new.rating,
overall_rating = total_rating / total_votes;
where 
bookID = new.bookID;
ELSE
insert into ratings_totals set bookID = new.bookID, total_votes =  total_votes, total_rating =  total_rating, overall_rating = overall_rating;
END IF;

END$$
DELIMITER ;

Моя проблема в том, что таблица Rating_totals неправильно обновлена. Он содержит четыре строки: bookID, total_votes, total_rating и total_rating. Обновлена ​​только таблица bookID; остальные остаются на уровне 0.

Моя цель - ВСТАВИТЬ строку в первый раз и обновить ее после этого. Я правильно это делаю?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2012

не должно ли "новое" быть "старым"? Как:

DELIMITER $$  

create trigger update_vote_after_insert after insert 
on ratings
for each row begin
  update ratings_totals set 
    total_votes = total_votes + 1,
    total_rating = total_rating + old.rating,
    overall_rating = total_rating / total_votes  
  where 
    bookID = old.bookID;

end$$
DELIMITER ;
0 голосов
/ 19 февраля 2012

Если вы хотите вставить в первый раз и просто обновить после первого раза, вы можете попробовать использовать оператор «IF». если (это первый раз) ///ваш код еще // ваш код

вы можете использовать "select", чтобы узнать, вставили ли вы эту строку ранее, и это будет ваш "IF"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...