2017-02-22 9 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 ; 

Это показывает, как ошибка:Multiple GROUP_CONCAT Заявление INTO MYSQL Trigger

1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с GROUP_CONCAT (invoice_no SEPARATOR ',') INTO data2

ответ

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 .. its working –

+0

@SudhanshuJain your добро пожаловать –

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 Checkout Профиль Barmar, если вы хотите увидеть настоящего гуру-гуру :-) –

+0

@TimBiegeleisen вы моя модель для подражания .... я всегда получаю вдохновение и знания из вашего ответа –