2012-10-16 34 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 ;