Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL嵌套条件更新触发器_Mysql_Triggers_Conditional Statements - Fatal编程技术网

MySQL嵌套条件更新触发器

MySQL嵌套条件更新触发器,mysql,triggers,conditional-statements,Mysql,Triggers,Conditional Statements,我试图找出一个条件触发器来更新MySQL表。 问题是,即使输入的数据与已经存在的数据相同,更新触发器也会触发。因此,如果我有一个列,它的行:值设置如下加上投票:2,如果我用update-vows-set加上投票=2更新即使没有任何改变,更新触发器仍然会被触发。为了防止所有这些,我想在触发器中添加一个条件子句,如下所示 BEGIN IF NEW.vote_value <> OLD.vote_value THEN UPDATE my_other_table SET plus_votes

我试图找出一个条件触发器来更新MySQL表。 问题是,即使输入的数据与已经存在的数据相同,更新触发器也会触发。因此,如果我有一个列,它的行:值设置如下加上投票:2,如果我用
update-vows-set加上投票=2更新即使没有任何改变,更新触发器仍然会被触发。为了防止所有这些,我想在触发器中添加一个条件子句,如下所示

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
开始
如果NEW.vote_value OLD.vote_value则
更新我的\u其他\u表
集合加票=
CASE NEW.vote_值在“1”时
然后加上你的票+1
其他加投票
完,,
减票=
CASE NEW.vote_值在“1”时
然后减去你的票数
ELSE减_票+1
结束
其中my_other_table.id=NEW.voces_join_id;
结束
结束

问题的后半部分是IF语句中有CASE条件。 有人能在这个ISSU上提供帮助,并演示如何在触发器中执行嵌套条件吗


非常感谢

虽然您发布的语法完全错误,但我已经找到了您想要的内容,请尝试一下(未经测试)

如果存在upd_表决,则丢弃触发器;
分隔符$$
更新“我的其他”表后创建触发器upd_投票`
每行开始
如果NEW.vote_value OLD.vote_value则
设置
NEW.plus\u voces=IF(NEW.voces\u value=1,OLD.plus\u voces+1,OLD.plus\u voces),
NEW.minus_Voces=IF(NEW.vote_value=1,OLD.minus_Voces,OLD.minus_Voces+1)
如果结束;
结束$$
定界符;

触发器的语法完全错误
您需要编写一个简单的mysql查询,而不是触发器。我可能应该包含整个触发器语法,我的意思是作为伪代码。我非常感谢您的帮助,并将在以后的帖子中纠正这一点或清楚地标记它。
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 ;