2011-02-04 77 views
5

我有两个MySQL表。投票表(id, userId, postId, voteTypeId),和帖子表(id, postTypeId, userId, parentId)表。我正在写一个插入选票后触发的触发器。如何使用触发器更新MySQL中的其他表?

我想触发器更新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 

我试着用的,而不是@the父母这...:

(SELECT posts.parentId FROM posts WHERE posts.id = NEW.postId) 

不过你,我不认为你可以在触发器做SELECTS除非你使用某种类型的SELECT INTO的语法。我想要更新的父邮件的唯一引用是其在投票中引用的子邮政标识。所以我不知道如何通过select来获取正确的ID。

这可能吗?

+0

你可以做实际上触发器内的SELECT。但是,您的其他语法看起来有点不合适。 – Mchl 2011-02-04 16:10:52

+0

@Mchl,我尝试了几种组合,但没有奏效。你能指点我做错了什么吗? – Mohamad 2011-02-04 16:35:37

回答

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