我有2个表TESTUserInfo和BlockRanking。
TestUserInfo是一组用户信息和特定用户的总计。每个用户还有一个与其用户关联的区域。
在BlockRanking中,我将所有用户与每个区域组合在一起,并将该区域的所有总点数相加。
我有这个查询从TESTUserInfo将值插入表BlockRanking并且它可以工作。
INSERT INTO BlockRanking (zone, total)
SELECT zone, SUM(total)
FROM TESTUserInfo
GROUP BY zone
ORDER BY SUM(total) DESC
现在我正在尝试做类似这样的事情,但我想更新TESTUserInfo时更新BlockRanking。我特别希望在BlockRanking分区后更新区域和这些区域的总数。
我希望这是一个触发器,所以当更新TESTUserInfo时,BlockRanking也会更新,或者按时间更新。如果这些都不可能,那么查询也会起作用。
答案 0 :(得分:0)
在表上运行某些查询时,您可以使用triggers来运行任务。每个插入的行都会触发一次触发器。我们可以跟踪在TESTUserInfo表到达时添加到TESTUserInfo表中的总数,而不是聚合。
CREATE TRIGGER update_totals AFTER INSERT ON TESTUserInfo
FOR EACH ROW
BEGIN
INSERT INTO BlockRanking
(zone, total)
VALUES
(NEW.zone, NEW.total)
ON DUPLICATE KEY UPDATE
total = total + VALUES(total);
END;
请注意,zone
必须是BlockRanking
中的唯一索引。
如果可以在TESTUserInfo中更新或删除行,则同样必须创建触发器。对于UPDATE
触发器,您可以执行以下操作:total = total + NEW.total - OLD.total
。
另见: