2012-10-19 84 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测试列。我希望这可以帮助你,如果有什么不清楚的,请告诉我。