2012-10-19 2 views
1

TEST1, TEST2, TEST3 ... TEST15 필드에 'Pass', 'Fail'또는 'NA'를 삽입하는 PHP 앱이 있습니다.조건이있는 MySQL 업데이트 트리거

TEST1-TEST15 필드에 'Fail'이 포함되어 있으면 자동으로 'FAIL'로 업데이트해야하는 OVERALL이라는 필드가 있습니다.

업데이트 문과 CASE 또는 IF가 포함 된 트리거를 사용해야하지만 정확한 구문을 못 잡을 수는 없었습니다.

누구든지 MySQL 놈을 도울 수 있습니까? 나는 MySQL 서버 버전을 사용하고있다 : 5.1.63-0 + squeeze1 (데비안).

답변

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로 모든 열을 선택하면됩니다. 예를 들면 다음과 같습니다. IF NEW.yourColumn = 'FAIL'또는 NEW.otherColumn = 'FAIL'등. 제가 의미하는 바가 분명하기를 바랍니다. – mboldt

+0

도와 주셔서 대단히 감사합니다. 나는 가까워지고있는 것 같아! mysql 프롬프트에 다음과 같이 입력했습니다 : 'delimiter | 각 ROW FOR 가 NEW.TEST1 = '실패'가 THEN 업데이트 TABLE_NAME 전반적인 설정하면 = 'FAIL을'시작 'TABLE_NAME ON INSERT 후에 트리거 setoverall을 작성; END IF; END; | delimiter; 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; 
| 

올바른 테이블 이름에 투입 할 자신의 값이 FAIL 인 경우 당신은 당신의 테이블에있는 모든 다른 13 시험 열을 체크 할 필요. 내가 알기에이 점이 도움이되기를 바랍니다.