Mysql触发条件和计算

时间:2018-04-30 04:13:10

标签: mysql sql triggers

我使用mysql触发器从插入任务表后插入贡献我需要计算总小时数( total_hours = new.hours + new.undayime )我需要从贡献

中选择total_hours

这是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

我需要从表格贡献表中获取值并将值添加到小时和加班

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

1 个答案:

答案 0 :(得分:1)

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

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 ;