2013-06-04 41 views
0

我有兩個表posts_appposts_unapp。兩者結構相同。MySql更新時,有條件地選擇到另一個表

posts_app - 包含主持人崗位

"id" "title" "body" "url" "user" "country" 

posts_unapp - 新職位會在這裏結束

"id" "title" "body" "url" "user" "country" "Status" 
1  Hello Test Foo  Bar  Tar   2 

posts_unapp包含了新的職位,其中主持人尚未獲批。新帖子插入status = 2(這意味着他們還沒有被選中,也沒有被批准或拒絕)。

一旦主持人檢查了一篇文章,列status更新爲true如果被批准,或false如果被拒絕。目前,只有狀態設置爲true,是否可以自動將帖子複製到posts_app表中?

想到這樣做的一種方法是在posts_unapp上使用trigger on update。但問題是,中間人可以將status設置爲truefalse。兩者都算作更新,兩者都會觸發觸發器。設置status = flase不需要複製數據,只有在status設置爲true時才需要複製數據。

什麼是一個很好的方法來做到這一點?我決定使用兩張桌子來保持posts_app表格清潔。

+0

是否有可能'posts_unapp'中的狀態可以更改回2,然後更改爲false和true(意味着重新打開評論的帖子)? – peterm

+0

現在,這是不可能的。一旦它的狀態被設置,它就不能重新打開。 – jmenezes

回答

2
DELIMITER $$ 
CREATE TRIGGER mytrig AFTER UPDATE ON posts_unapp 
    FOR EACH ROW 
    BEGIN 
     IF NEW.Status = 'true' THEN 
      INSERT INTO posts_app VALUES(NEW.id, NEW.title,NEW.body,NEW.url,NEW.user,NEW.country); 
     END IF; 
    END; 
$$ 
DELIMITER ; 
+0

我正在嘗試這個。似乎遇到了一些問題。 – jmenezes

+0

這有效。事情是'post_app'中的'id'列是'auto increment'。如果我把它放在觸發器中,我會得到'列計數與第1行的值計數不匹配'。所以我需要使用:INSERT INTO posts_app(title,body,url,user,country)VALUES(NEW.title,NEW.body,NEW.url,NEW.user,NEW.country);'是嗎? – jmenezes

+0

是的!你是絕對正確的。 – chetan