2012-02-19 153 views
0

我在MySQL数据库中创建了以下触发器。这是一个星级评分系统。无论何时将行添加到收视表中,都应该将其添加到ratings_totals表中。MySQL触发器不更新表

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 ; 

我的问题是不正确地更新了ratings_totals表。它包含四行:bookID,total_votes,total_rating和overall_rating。只有bookID表被更新;其余的保持为0.

我的目标是在第一次插入行并在此之后进行更新。我做对了吗?

+0

你为什么要插入然后更新?你为什么不立即插入? – 2012-02-19 14:30:12

+0

因为在第一次插入后,我只想更新相同的行(即每个项目被评为1行)。我不想每次都为同一个项目插入一个新行;这是没有道理的。 – 2012-02-19 14:32:20

+0

我已经取出插入线,但没有区别。触发器仍然不起作用。 – 2012-02-19 14:33:05

回答

0

如果您想在第一次插入并在第一次后更新,您可以尝试使用“IF”语句。 如果(这是第一次) ///代码 其他 //你的代码

您可以使用“选择”,以找出是否你插入此行之前,这将是你的“IF”

+0

好吧,我对代码做了一些更改......但是现在我不断收到一个MySQL错误:#1064 - 你的SQL语法错误;检查对应于你的MySQL服务器版本的手册正确的语法使用近“DELIMITER $$ 创建慧慧插入 之前触发update_vote_after_insert_trig”在行1 – 2012-02-19 14:48:01

0

不应该“新”是“旧”?像:

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

没有,因为我加入新插入的评级至总评分。 – 2012-02-19 14:48:37

+0

那么问题应该是在新/旧的问题,我认为,因为你说只有total_rating和整体现在更新...请看看这个页面http://dev.mysql.com/doc/refman/5.0 /en/create-trigger.html和第一个用户对它的评论。也许它会帮助 – jribeiro 2012-02-19 15:01:21

+0

不,只有bookID被更新。没有别的。但是,谢谢,我会看看。 – 2012-02-19 15:13:27