如何使用触发器更新MySQL中的其他表?

时间:2011-02-04 15:55:25

标签: mysql triggers sql-update

我有两个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的情况下进行更新。

这可能吗?

1 个答案:

答案 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