带条件和计算的Mysql触发器

带条件和计算的Mysql触发器,mysql,sql,triggers,Mysql,Sql,Triggers,在插入任务表之后,我使用mysql触发器从插入贡献,我需要计算总小时数(total_hours=new.hours+new.加班),并且我需要从贡献表中选择总小时数 这是我正在使用的mysql触发器,但它不工作 CREATE TRIGGER update_hours AFTER INSERT ON tasks FOR EACH ROW BEGIN SELECT p_id d_id hours overtime total_hours FROM contr

在插入任务表之后,我使用mysql触发器从插入贡献,我需要计算总小时数(total_hours=new.hours+new.加班),并且我需要从贡献表中选择总小时数

这是我正在使用的mysql触发器,但它不工作

     CREATE TRIGGER update_hours AFTER INSERT ON tasks
     FOR EACH ROW 
     BEGIN
     SELECT p_id d_id hours overtime total_hours FROM contribution WHERE 
      p_id == new.p_id && d_id == new.d_id 

     new.total_hours = total_hours + new.hours + new.overtime


 INSERT INTO contribution
      ( p_id,
       d_id,
       hours,
       overtime,
       total_hours,
       contribution )
       VALUES
          ( NEW.p_id,
            NEW.d_id,
            NEW.hours,
            NEW.overtime,
            new.total_hours,
            NEW.contribution );
      END IF;

 END
我需要从贡献表中获取值,并将这些值添加到工时和加班中


我需要在添加任务小时数和加班时插入贡献表。需要计算总小时数(小时数+加班时间)并将其添加到贡献总小时数中

第一步是获取贡献中以前的全部条目。 第二步是添加插入到任务中的新值,并添加到总数中。 第三步是将结果插入贡献

DELIMITER |

CREATE TRIGGER update_hours AFTER INSERT ON tasks
FOR EACH ROW 
BEGIN
    SET @old_total_hours = (SELECT SUM(hours + overtime)
        FROM contribution 
        WHERE p_id == new.p_id && d_id == new.d_id 
        GROUP BY p_id);

    SET @total_hours = @old_total_hours + new.hours + new.overtime;

    INSERT INTO contribution
    ( p_id,
    d_id,
    hours,
    overtime,
    total_hours,
    contribution )
    VALUES
    ( 
        NEW.p_id,
        NEW.d_id,
        NEW.hours,
        NEW.overtime,
        @total_hours,
        NEW.contribution
    );
END|

DELIMITER ;

使用
SET@total\u hours
而不是
new.total\u hours
。注意,使用变量而不是伪列名。此外,您应该编辑问题以显示整个触发器定义,而不仅仅是它的内容。您正在创建的触发器类型可能有问题。此外,第一个select语句的列列表编写不正确-没有逗号,并且不需要列。你可以简单地在select语句中设置变量值。你能帮我纠正吗?我不记得正确的语法了,我只是写了一个伪代码,你能帮我重新写吗?我花了很多时间在这个问题上,还是想不出帮助我你能添加触发器定义的全文吗?您请求帮助,但忽略了注释中的信息请求。这里有一些语法错误1)有一个悬空as语句2)mysql中的Null safe equal is(not==)3)有一个end if,但没有IFF对于
end if我刚刚复制/粘贴了OPs代码,但没有看到。不管怎样,谢谢你的帮助。我已经更新了代码。嘿,现在我需要使用总小时数计算每个开发人员(d_id)在项目中的贡献(p_id)不同的问题,所以请问一个新问题。你能帮我吗?我需要在2小时内提交我的学校作业:(