2010-02-25 148 views
2

我知道它可能會自動增加值,但我想知道是否可以根據其他兩個字段的值填充字段。我與字段的表:Mysql根據兩個其他字段的值自動填充字段?

CREATE TABLE pligg_links (
    ... 
    link_votes INT, 
    link_reports INT, 
    link_votes_total INT, 
    ... 
); 

場link_votes_total應持有從link_reports減去場link_votes的價值。所以基本上,這是數學公式:link_votes_total = link_votes - link_reports。這是可能的,而不必在數據存儲之前使用php來做到這一點?

+1

@jiexi:代碼總是被讚賞,因爲它簡潔明瞭,比人類語言更清晰。我在猜測桌子的結構。隨時糾正它。 – outis 2010-02-25 01:30:41

回答

3

是的,這可以通過創建BEFORE INSERT觸發,另一個用於BEFORE UPDATE來完成:

DELIMITER // 

CREATE TRIGGER trig_mytable BEFORE INSERT ON my_table 
FOR EACH ROW 
BEGIN 
    SET NEW.link_votes_total = NEW.link_votes - NEW.link_reports; 
END 
// 

CREATE TRIGGER trig_mytable BEFORE UPDATE ON my_table 
FOR EACH ROW 
BEGIN 
    SET NEW.link_votes_total = NEW.link_votes - NEW.link_reports; 
END 
// 

DELIMITER ; 

延伸閱讀:

+0

小心將我鏈接到教程?謝謝! – jiexi 2010-02-25 01:20:20

+0

RTM:http://dev.mysql.com/doc/refman/5.1/en/triggers.html – outis 2010-02-25 01:24:55

+0

我會在哪裏放置這個?我使用phpmyadmin等價物。 對不起,我是一個noob :( – jiexi 2010-02-25 01:25:44

1

參見:http://dev.mysql.com/doc/refman/5.1/en/triggers.html

DELIMITER // 

CREATE TRIGGER bir_links 
BEFORE INSERT ON links 
FOR EACH ROW 
BEGIN 
    SET link_votes_total = NEW.link_votes - NEW.link_reports; 
END; 
// 

CREATE TRIGGER bur_links 
BEFORE UPDATE ON links 
FOR EACH ROW 
BEGIN 
    SET link_votes_total = NEW.link_votes - NEW.link_reports; 
END; 
// 

DELIMITER ; 
+0

DELIMITER // CREATE TRIGGER bir_links BEFORE INSERT ON pligg_links FOR EACH ROW BEGIN SET link_vote_total = NEW.link_votes - NEW.link_reports;結束; // CREATE TRIGGER bur_links在更新之前pligg_links FOR EACH ROW BEGIN SET link_vote_total = NEW.link_votes - NEW.link_reports;結束; // DELIMITER;失敗:您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行'DELIMITER // CREATE TRIGGER bir_links之前插入在pligg_links FOR EACH ROW'附近使用正確的語法 使用virtualmin/webmin btw – jiexi 2010-02-25 01:38:50

相關問題