我正在尝试创建一个触发器,该触发器将在另一个表上有插入时更新列。就我而言,每当我在表student_likes_post
中插入新的like时,我都希望表forum_post
相应地更新其likes
列。这是我的查询:
use mydb;
DELIMITER //
CREATE TRIGGER update_likes
after INSERT
ON student_likes_post FOR EACH ROW
BEGIN
UPDATE forum_post
SET forum_post.likes = (
select count(*)
FROM student_likes_post
WHERE student_likes_post.post_id = forum_post.id
);
END;
DELIMITER;
但是,当我运行它时,它会一直运行下去,什么也没发生。子查询虽然可以单独工作。我在同一表student_likes_post
上尝试了其他具有相同问题的触发器。知道如何使它起作用吗?您认为表本身或代码有问题吗?
答案 0 :(得分:0)
您可能只想更新forum_post
中学生喜欢的帖子的行中的 ,而不是forum_posts的所有邮件 all ,对吗?
您的触发器当前正在更新forum_post中的所有行,并为forum_post中的每一行运行一次子查询。
这是编写触发器的另一种方法,它仅更新相应的单个forum_post行:
CREATE TRIGGER update_likes
after INSERT
ON student_likes_post FOR EACH ROW
BEGIN
DECLARE like_count INT;
SELECT COUNT(*) INTO like_count
FROM student_likes_post WHERE post_id = NEW.post_id;
UPDATE forum_post
SET likes = like_count
WHERE id = NEW.post_id;
END