2011-12-18 46 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 = ? 

並帶您從您的查詢值。這是保證工作,因爲更新是原子(你不必擔心其他進程插入/更新併發)