#mysql
#mysql
Вопрос:
Я хочу создать триггер, который вставит идентификатор post и meta_value в другую таблицу (subscription_lookup) после новой вставки в таблицу wp_postmeta. Любой может сказать мне, какую часть я сделал неправильно, поскольку код не работает
DELIMITER $
CREATE TRIGGER `wp_postmeta_AFTER_INSERT`
AFTER INSERT ON `wp_postmeta`
FOR EACH ROW
BEGIN
SET @order_id = ( SELECT new.post_id FROM wp_postmeta
where meta_key = '_paid_date');
SET @paid_date = ( SELECT new.meta_value FROM wp_postmeta
where meta_key = '_paid_date' );
INSERT INTO subscription_lookup (subscription_id, start_date)
VALUES (@order_id,@paid_date);
END $
DELIMITER ;
Комментарии:
1.
NEW.column_name
уже сохраняется значение для строки, которая в данный момент обрабатывается триггером — вам не нужно ВЫБИРАТЬ.2. Но без выбора я не мог использовать оператор where
3. Вы не можете выбрать
NEW.column
!!!NEW
НЕ является таблицей. Предположим, чтоNEW.column
это имя скалярной локальной переменной, а ее префикс (NEW.
) показывает, что он хранит (уже хранит!) новое значение, которое присваивается (уже присвоено! триггер ПОСЛЕ) в столбец.4. Большое вам спасибо, я новичок в SQL, но еще раз спасибо за объяснение.
Ответ №1:
Тест
CREATE TRIGGER `wp_postmeta_AFTER_INSERT`
AFTER INSERT ON `wp_postmeta`
FOR EACH ROW
INSERT INTO subscription_lookup (subscription_id, start_date)
SELECT NEW.post_id, NEW.meta_value
WHERE NEW.meta_key = '_paid_date';
Этот триггер проверяет, вставлена ли строка в wp_postmeta
'_paid_date'
свойство contains, и если true, то он вставляет значения, вставленные в таблицу ведения журнала, иначе ни одно из них не вставляется.