2011-12-18 70 views
0

专栏中,我有一个网站表所示:MySQL的触发器来概括,其中列ID等于最后插入的行ID和存储

WEBSITE 
web ID | url   | progress 
------------------------------- 
1  | example.com | 67 

我有一个进度表,如下所示:

PROGRESS 
progress id | linking website id | amount to increase 
--------------------------------------------------- 
1   | 1     | 60 
2   | 1     | 7 

当行使用INSERT INTO插入PROGRESS,

我使用php和mysql从PROGRESS表中获取累积值,然后将新值存储到WEBSITE表中的进度值中。

无论其...

我在想,如果我可以用这些触发器我已经听到自动总结新进展值和存储呢?

这可能吗?

+0

只是快速注意到关于进一步信息 - 您的表格模式中拼写错误的数量,应该只有一个_m_ - 可能会为将来的开发提供一个很好的方法RS :) – 2011-12-19 00:15:01

+0

HAHAA我一直用2M的拼写......我从来没有真正实现...干杯:) – 2011-12-19 00:33:28

回答

2

你并不真的需要使用一个触发器,你可以添加进展到在website现有行,但如果你想尝试,你可以使用触发器以下

delimiter $$ 

CREATE TRIGGER progress_update AFTER INSERT ON `progress` 
    FOR EACH ROW BEGIN 
    UPDATE `website` SET `progress` = `progress` + NEW.ammount_to_increase WHERE web_ID = NEW.linking_website_id; 
    END; 
$$ 

delimiter ; 

您还可以找到有关语法和使用触发器在手册中12.1.11. CREATE TRIGGER Syntax

+0

我现在意识到,我不需要使用触发器!但谢谢你的例子提供:) – 2011-12-19 00:31:33

2

你可以使用触发器,但你并不需要;只是这样做:

update website set 
progress = progress + ? 
where web_id = ? 

并带您从您的查询值。这是保证工作,因为更新是原子(你不必担心其他进程插入/更新并发)