Проблема создания нового триггера с подзапросом - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать триггер, который будет обновлять столбец при каждой вставке в другую таблицу. В моем случае, всякий раз, когда я вставляю новый аналог таблицы student_likes_post, я хочу, чтобы таблица 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, которые имеют ту же проблему. Есть идеи, как мне заставить это работать? Как вы думаете, это проблема с самой таблицей или с кодом?

1 Ответ

0 голосов
/ 09 июля 2019

Вы, вероятно, хотите обновить только строку в forum_post для поста, который понравился студенту, а не все forum_posts, верно?

Ваш триггер в настоящее время обновляет все строки в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...