2012-10-19 127 views
1

我有一個PHP應用程序,通過TEST15向字段TEST1,TEST2,TEST3中插入'Pass','Fail'或'NA'。帶條件的MySQL更新觸發器

我有一個名爲OVERALL的字段,如果任何TEST1-TEST15字段包含'Fail',則需要使用'FAIL'自動更新。

我很確定我需要使用包含update語句和CASE或IF的觸發器,但是我一直無法確定確切的語法。

任何人都可以請幫忙一個MySQL的noob?我正在使用MySQL服務器版本:5.1.63-0 + squeeze1(Debian)。

回答

0

你也許可以做類似

CREATE TRIGGER triggerName AFTER INSERT ON yourTable 
FOR EACH ROW BEGIN 
    IF NEW.yourColumn = 'Fail' THEN 
     UPDATE otherField set column = 'Fail' 
    END IF; 
END 

這是這樣一個觸發可能是什麼樣子的理論,但是我必須說我不是,因爲它已經有一段語法的100%,因爲我在MySQL上工作。

您可以檢查更多的相關信息的手冊上的觸發 http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

+0

這是非常有幫助的。謝謝! 我需要爲每個需要檢查的列使用單獨的IF語句,還是有更好的方法來做到這一點? –

+0

如果它總是相同的列,你會更新,那麼你可以簡單地用OR來檢查所有的列。例如:如果NEW.yourColumn ='FAIL'或NEW.otherColumn ='FAIL'等。我希望這很清楚我的意思。 – mboldt

+0

非常感謝你幫助我。我想我正在接近! 我在mysql提示符下輸入: 'delimiter | CREATE TRIGGER setoverall INSERT ON TABLE_NAME AFTER FOR EACH ROW BEGIN IF NEW.TEST1 = '失敗' THEN UPDATE TABLE_NAME設置OVERALL = 'FAIL'; END IF; END; | 分隔符;' MySQL不會抱怨,但如果我向TABLE_NAME中插入新數據,OVERALL列不會被更新。 還有什麼線索? –

0

確定這裏是另一個觸發你可以給一個嘗試。我測試了它,如果插入行的test1或test2的值爲FAIL,它應該將整個字段更改爲FAIL。除了插入的行之外,它不會爲其他任何行設置總體字段。

的觸發代碼:

DELIMITER | 

CREATE TRIGGER setoverall BEFORE INSERT ON table_name 
    FOR EACH ROW BEGIN 
    IF NEW.test1 = 'FAIL' OR NEW.test2 = 'FAIL' THEN 
     SET NEW.overall = 'FAIL'; 
    END IF; 
    END; 
| 

所有你需要做的就是把正確的表名,並檢查你有你的表,如果他們的價值是失敗的所有其他13測試列。我希望這可以幫助你,如果有什麼不清楚的,請告訴我。