2012-10-16 33 views
0

我想弄清楚MySQL表格的更新條件觸發器。 問題是,即使輸入的數據與已經存在的數據相同,更新觸發器也會被觸發。所以,如果我有一列有一行:值設置像這樣plus_votes:2如果我用UPDATE votes SET plus_votes = 2;更新,即使沒有真正改變,UPDATE觸發器仍然被觸發。因此,爲了防止這一切我想要一個條件子句添加到我的觸發這樣MySQL在有條件的更新觸發器中嵌套

BEGIN 
IF NEW.vote_value <> OLD.vote_value THEN 
UPDATE my_other_table 
SET plus_votes = 
    CASE NEW.vote_value WHEN '1' 
     THEN plus_votes + 1 
     ELSE plus_votes 
    END, 
    minus_votes = 
    CASE NEW.vote_value WHEN '1' 
     THEN minus_votes 
     ELSE minus_votes +1 
    END 
WHERE my_other_table.id=NEW.votes_join_id; 
END 

END

問題的後半部分是我有IF語句中CASE條件。 有人可以幫助這個issiu,並顯示如何在TRIGGER內部嵌套條件?

大加讚賞

+0

的完全錯誤的語法什麼'TRIGGER' – diEcho

+0

你需要寫一個簡單的mysql查詢不是觸發器 – diEcho

+0

我可能應該包括整個觸發語法,我的意思是它作爲僞代碼。我非常感謝您的幫助,並會在以後的文章中對此進行更正或明確標記。 – edgar

回答

0

雖然你已經發布的語法是完全錯誤的,我已經想通了,你想試試這個(未測試)

DROP TRIGGER IF EXISTS upd_vote; 

DELIMITER $$ 

    CREATE TRIGGER upd_vote AFTER UPDATE ON `my_other_table` 
    FOR EACH ROW BEGIN 
    IF NEW.vote_value <> OLD.vote_value THEN 
     SET 
     NEW.plus_votes = IF(NEW.vote_value=1,OLD.plus_votes+1,OLD.plus_votes), 
     NEW.minus_votes = IF(NEW.vote_value=1,OLD.minus_votes,OLD.minus_votes +1) 
    END IF; 
END$$ 

DELIMITER ;