我需要计算每个开发商的项目基础上的贡献
Contribution table
-------------------------------------------------------------
| id | projected | developer id | total hours | contribution|
-------------------------------------------------------------
| 1 | 1 | 1 | 25 | |
-------------------------------------------------------------
| 2 | 1 | 2 | 75 | |
-------------------------------------------------------------
| 3 | 2 | 1 | 10 | |
-------------------------------------------------------------
需要在插入和更新预期结果之后使用触发器更新同一个表
Contribution table
-------------------------------------------------------------
| id | projected | developer id | total hours | contribution|
-------------------------------------------------------------
| 1 | 1 | 1 | 25 | 25% |
------------------------------------------------------------
| 2 | 1 | 2 | 75 | 75% |
-------------------------------------------------------------
| 3 | 2 | 1 | 10 | 100% |
-------------------------------------------------------------
获得贡献的计算
项目1:
总小时数=25+75=100每位开发者贡献=25/100*100=25%
我需要一个触发器来得到这个结果:但我不知道如何得到这个结果
这是我的触发器没有得到错误,但贡献计算不正确
CREATE TRIGGER `update_contribution` AFTER INSERT ON `tasks`
FOR EACH ROW BEGIN
IF NOT EXISTS
(SELECT p_id ,d_id
FROM contribution
WHERE
p_id = NEW.p_id
AND
d_id = NEW.d_id)
THEN
SET @old_total_dev_hours = (SELECT SUM(total_hours)
FROM contribution
WHERE p_id = NEW.p_id
GROUP BY p_id);
SET @total_hours1 = (SELECT (total_hours)
FROM contribution
WHERE d_id = NEW.d_id AND p_id = NEW.p_id
);
SET @dev_con = @total_hours1/@old_total_dev_hours*100 ;
SET @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 ,
@dev_con
);
ELSE
UPDATE contribution
SET
hours = hours + NEW.hours ,
overtime = overtime + NEW.overtime,
total_hours = hours + overtime,
contribution = @dev_con
WHERE
p_id = NEW.p_id
AND
d_id = NEW.d_id;
END IF;
END
这是我的代码,在这个代码中其他计算都很好,贡献得不正确!!
2条答案
按热度按时间avwztpqn1#
假设任务记录了开发人员在项目上的工作时间,那么可能会发生两件事1)没有注意到开发人员在贡献中已经在项目上工作了2)开发人员已经在项目上工作了,他工作的时间需要在贡献中更新。这两种情况都意味着每个任务的插入都需要重新计算所有开发人员的贡献。
例如
注意,如果业务规则是开发人员可以在任务中修改的,那么您还需要按照同样的思路更新触发器。
pvabu6sv2#
这是一个更新的触发器,它将取代您之前问题中的触发器。它同时计算总时数和贡献百分比。