2017-02-22 56 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你是我的榜样....我总是从你的答案得到启发和知识 –