SQL Триггер после вставки не вставляет значения в новую таблицу - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть веб-сайт WordPress и плагин, с помощью которого я могу импортировать товары. Когда продукт импортируется, к нему прикрепляются метатеги, как показано ниже (47226 - это товар, а 47227 - это изменение 47226): enter image description here

Когда новый товар импортируемый через плагин, он автоматически вставляет все эти метаданные в таблицу с именем wp_postmeta. Поскольку у каждого продукта всегда есть «_price», а варианты имеют как «_price», так и «_regular_price», я пытаюсь извлечь только строки «_price» и «_regular_price» с соответствующими значениями для post_id, meta_key и meta_value и сохранить эти значения в новую таблицу под названием original_price с триггером. Плагин также вставляет обновления цены в wp_postmeta для существующих продуктов в таблице original_price, поэтому я хочу исключить их и вставлять только те элементы, которые еще не существуют в таблице original_prices. Пока мой триггер:

DELIMITER //
CREATE TRIGGER `new_import_INSERT` AFTER INSERT ON `wp_postmeta`
 FOR EACH ROW BEGIN
INSERT INTO original_prices (date_added,post_id,meta_key,meta_starting_price)
SELECT now(),post_id,meta_key,meta_value FROM wp_postmeta 
WHERE post_id=NEW.post_id AND NEW.meta_key IN ('_price','_regular_price') AND NOT EXISTS (SELECT * FROM original_prices WHERE post_id=new.post_id);
   END//
DELIMITER ;

Это работает, но для каждого _price и _regular_price он дублирует результаты 18 раз. Я попытался изменить FROM wp_postmeta на FROM inserted, но это делает его таким, чтобы никакие записи не добавлялись в original_prices, когда новый продукт импортируется через плагин. Я также попытался изменить SELECT now(),post_id,meta_key,meta_value на SELECT now(),NEW.post_id,NEW.meta_key,NEW.meta_value, но это также не решило проблему дублирования. Где я ошибаюсь, чтобы дублировать результаты столько раз?

1 Ответ

0 голосов
/ 15 февраля 2020

Если вы хотите, чтобы строка вставлялась, когда 'meta_key is _price' или '_regular_price'

Итак, вы делаете что-то подобное

DELIMITER //
CREATE TRIGGER `new_import_INSERT` AFTER INSERT ON `wp_postmeta`
 FOR EACH ROW BEGIN
     IF (NEW.meta_key  = '_price' OR NEW.meta_key = '_regular_price') THEN
        INSERT INTO original_prices (date_added,post_id,meta_key,meta_starting_price) VALUES
           (now(),NEW.post_id,NEW.meta_key,NEW.meta_value );
    END IF;
   END//
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...