【问题标题】:Multiple GROUP_CONCAT Statement INTO MYSQL Trigger多个 GROUP_CONCAT 语句 INTO MYSQL 触发器
【发布时间】:2017-02-22 06:27:02
【问题描述】:
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 ;

显示为错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'GROUP_CONCAT( invoice_no SEPARATOR ',' ) INTO data2 附近使用的正确语法

【问题讨论】:

    标签: mysql triggers group-concat


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      我不是 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;
      

      【讨论】:

      • I'm not an expert with MySQL triggers, 你是专家..!!
      • @SagarGangwal 如果您想了解真正的 MySQL 大师,请查看 Barmar 的个人资料 :-)
      • @TimBiegeleisen 你是我的榜样......我总是从你的回答中得到启发和知识
      猜你喜欢
      • 2013-01-28
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2013-05-28
      相关资源
      最近更新 更多