1

次の例のようにトリガーがあります。

BEFORE UPDATE ON icharts_user_stats FOR EACH ROW BEGIN

IF (NEW.col1> OLD.col1
    OR NEW.col2 > OLD.col2) THEN 
    SET NEW.col3 =  NEW.col3+1;
    SET NEW.col4 =  NEW.col4+1; END  IF;

IF (NEW.col5> OLD.col5
    OR NEW.col6 > OLD.col6) THEN 
    SET NEW.col7 =  NEW.col7+1; END  IF;

IF (NEW.col8> OLD.col8
    OR NEW.col9 > OLD.col9) THEN 
    SET NEW.col10 =  NEW.col10+1; END  IF;

これはswitchステートメントのようなもので、どの時点でも1つの'if'のみが実行されます。上記のコードは機能しますが、最初の'if'がヒットした場合でも、他のすべてのifを通過します。

  1. それを行うためのより良い方法はありますか?
  2. 「良いアイデア」の場合、「終了」の直前に「脱退」を使用しています

ありがとう

4

2 に答える 2

3

これを試して。

BEFORE UPDATE ON icharts_user_stats FOR EACH ROW 
icharts_user_stats:BEGIN

IF (NEW.col1> OLD.col1
    OR NEW.col2 > OLD.col2) THEN 
    SET NEW.col3 =  NEW.col3+1;
    SET NEW.col4 =  NEW.col4+1; 
    leave icharts_user_stats;
END  IF;

IF (NEW.col5> OLD.col5
    OR NEW.col6 > OLD.col6) THEN 
    SET NEW.col7 =  NEW.col7+1; 
    leave icharts_user_stats;
END  IF;

IF (NEW.col8> OLD.col8
    OR NEW.col9 > OLD.col9) THEN 
    SET NEW.col10 =  NEW.col10+1; 
    leave icharts_user_stats;
END  IF;
于 2017-03-17T12:54:11.263 に答える
-1

これを試しましたか?

BEFORE UPDATE ON icharts_user_stats FOR EACH ROW BEGIN

    IF (NEW.col1> OLD.col1
        OR NEW.col2 > OLD.col2) THEN 
        SET NEW.col3 =  NEW.col3+1;
        SET NEW.col4 =  NEW.col4+1; 

    ELSEIF (NEW.col5> OLD.col5
        OR NEW.col6 > OLD.col6) THEN 
        SET NEW.col7 =  NEW.col7+1; 

    ELSEIF (NEW.col8> OLD.col8
        OR NEW.col9 > OLD.col9) THEN 
        SET NEW.col10 =  NEW.col10+1; END  IF;
于 2012-05-15T03:11:36.023 に答える