我有两个MySQL表。投票表(id, userId, postId, voteTypeId)
和职位表(id, postTypeId, userId, parentId)
表。我正在写一个在插入投票后触发的触发器。
我希望触发器更新posts表中的帖子。但是这篇文章与postId
下我的投票表中引用的帖子不同;它是该帖子的父母。
BEGIN
CASE NEW.voteTypeId
WHEN 2 THEN UPDATE posts SET posts.acceptedAnswerId = NEW.postId WHERE posts.id = @the parent postId of NEW.postId
ELSE
BEGIN
END;
END CASE;
END
我尝试使用它而不是@的父...:
(SELECT posts.parentId FROM posts WHERE posts.id = NEW.postId)
但是你不认为你可以在触发器中做SELECTS,除非你使用某种类型的SELECT INTO语法。我对要更新的父帖的唯一引用是其在投票中引用的子postId。因此,我不知道如何在没有通过选择获取正确ID的情况下进行更新。
这可能吗?
答案 0 :(得分:2)
我会这样做:
BEGIN
IF (NEW.voteTypeId = 2) THEN
UPDATE
posts AS p
CROSS JOIN
posts AS p2
ON
p.id = p2.parentId
SET
p.acceptedAnswerId = NEW.postId
WHERE
p2.id = NEW.postId;
END IF;
END