2017-02-22 61 views
0
DELIMITER | 

DROP TRIGGER IF EXISTS update_trigger | 

CREATE TRIGGER update_trigger 
    BEFORE UPDATE ON suborder 
    FOR EACH ROW 
    BEGIN 
    DECLARE change_value TEXT; 
    DECLARE new_data TEXT; 
    DECLARE changed_val BOOL; 
    DECLARE data TEXT; 
    DECLARE data2 TEXT; 
    SET data = ''; 
    SET new_data = CONCAT("{", "\"order_id\"", ":", "\"", NEW.order_id, "\""); 
    SET changed_val = FALSE; 

    IF(NEW.order_status_id > 0) THEN 

    IF (OLD.suborder_id != NEW.suborder_id) THEN 
     SET changed_val = TRUE; 

     SELECT GROUP_CONCAT(suborder_id SEPARATOR ',') INTO data, 
       GROUP_CONCAT(suborder_id SEPARATOR ',') INTO data2 
     FROM oc_suborder 
     WHERE order_id = NEW.order_id AND 
       suborder_id != OLD.suborder_id 
     GROUP BY order_id; 

     SET new_data := CONCAT(new_data, ",", "\"suborders\"", ":{"); 
     SET new_data := CONCAT(new_data, "\"old\"", ":", "\"",data ,",", OLD.suborder_id, "\""); 
     SET new_data := CONCAT(new_data, ",\"new\"", ":", "\"",data ,",", NEW.suborder_id, "\""); 
     SET new_data := CONCAT(new_data, "}"); 
    END IF; 
    SET new_data := CONCAT(new_data, "}"); 



    IF (changed_val = TRUE) THEN 
     INSERT INTO oc_order_change_log 
     SET order_id = NEW.order_id, 
      table_name = 'oc_suborder', 
      change_details = new_data, 
      date_added = NOW(), 
      solr_synced = 0; 
    END IF; 

    END IF; 
    END | 
    DELIMITER ; 

它顯示爲錯誤:多GROUP_CONCAT聲明到MySQL觸發

1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「GROUP_CONCAT(invoice_no分離器」,」)INTO數據2

回答

1

你有語法問題

SELECT GROUP_CONCAT(suborder_id SEPARATOR ',') INTO data, 
       GROUP_CONCAT(suborder_id SEPARATOR ',') INTO data2 
     FROM oc_suborder 
     WHERE order_id = NEW.order_id AND 
       suborder_id != OLD.suborder_id 
     GROUP BY order_id; 

SELECT GROUP_CONCAT(suborder_id SEPARATOR ',') , 
     GROUP_CONCAT(suborder_id SEPARATOR ',') INTO data,data2 
     FROM oc_suborder 
     WHERE order_id = NEW.order_id AND 
       suborder_id != OLD.suborder_id 
     GROUP BY order_id; 
+0

Thankyou ..其工作 –

+0

@SudhanshuJain你的歡迎 –

1

我不是專家與MySQL觸發正確的語法手冊,但我相信SELECT ... INTO語法看起來應該類似於INSERT,即

SELECT col1, col2 INTO var1, var2 

試試這個代碼:

IF (OLD.suborder_id != NEW.suborder_id) THEN 
    SET changed_val = TRUE; 

    SELECT GROUP_CONCAT(suborder_id SEPARATOR ','), 
      GROUP_CONCAT(suborder_id SEPARATOR ',') 
    INTO data, data2 
    FROM oc_suborder 
    WHERE order_id = NEW.order_id AND 
      suborder_id != OLD.suborder_id 
    GROUP BY order_id; 

    SET new_data := CONCAT(new_data, ",", "\"suborders\"", ":{"); 
    SET new_data := CONCAT(new_data, "\"old\"", ":", "\"",data ,",", OLD.suborder_id, "\""); 
    SET new_data := CONCAT(new_data, ",\"new\"", ":", "\"",data ,",", NEW.suborder_id, "\""); 
    SET new_data := CONCAT(new_data, "}"); 
END IF; 
+1

取代''我不跟MySQL的專家觸發,'你是專家的人.. !! –

+0

@SagarGangwal結賬Barmar的個人資料,如果你想看到一個真正的MySQL大師:-) –

+0

@TimBiegeleisen你是我的榜樣....我總是從你的答案得到啓發和知識 –