2011-02-04 79 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