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

Moh*_*mad 5 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
Run Code Online (Sandbox Code Playgroud)

我尝试使用它而不是@的父...

(SELECT posts.parentId FROM posts WHERE posts.id = NEW.postId)
Run Code Online (Sandbox Code Playgroud)

但是你不认为你可以在触发器中做SELECTS,除非你使用某种类型的SELECT INTO语法.我对要更新的父帖的唯一引用是其在投票中引用的子postId.所以我不知道如何在没有通过选择获取正确的ID的情况下进行更新.

这可能吗?

Mch*_*chl 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
Run Code Online (Sandbox Code Playgroud)