powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите, плз, с триггером.
4 сообщений из 4, страница 1 из 1
Помогите, плз, с триггером.
    #38933906
Pawana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть вот такой триггер:

drop trigger if exists `synk_qt`
delimiter $$
CREATE TRIGGER `sync_qt` AFTER UPDATE ON `a_table`
FOR EACH ROW
BEGIN
UPDATE `b_table` SET `p_q` = `a_table.p_q`;
END $$
delimiter;

При его наличие нельзя сделать апдейт записи - выдает ошибку #1054 - Unknown column 'a_table.p_q' in 'field list'. А он должен срабатывать как раз после такого апдейта.

Подскажите, пожалуйста, где ошибка. Я в SQL ноль, мои познания закончились 20 лет назад на DBase 4 :)

Заранее благодарю.
...
Рейтинг: 0 / 0
Помогите, плз, с триггером.
    #38934001
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ссылки на обновлённые данные в триггере (а это всегда одна запись) нельзя использовать имя таблицы. Для этого существует алиас NEW.
...
Рейтинг: 0 / 0
Помогите, плз, с триггером.
    #38934177
Pawana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за подсказку. Исправил - заработало.

Теперь у меня другая проблема, а ясности пока не добавляется :)

Ситуация следующая: есь три и-магазина на джумле. Движки одинаковые, БД общая, таблицы - разные, id товаров одинаковые, цены и описания разные.

Я пытаюсь с помощью триггеров на апдейт синхронизировать остатки всех трех магазинов (склад у них общий).

Идея в том, чтобы на каждую таблицу товара повесить триггер, который при изменении остатка товара будет изменять остаток в 2х других таблицах. Но так получается замкнутый круг. Разорвать его мне кажется можно проверкой if - then - если разницы между новым и старым значением нет, то и апдейт выполнять не нужно. Но что-то я делаю не так, но не понимаю что.

Триггер сейчас вот такой:

DROP TRIGGER IF EXISTS `sync_qt_art`;

CREATE TRIGGER `sync_qt_art` AFTER UPDATE ON `art_jshopping_products`
FOR EACH ROW
BEGIN
IF OLD.`product_quantity` > NEW.`product_quantity` THEN
UPDATE `amr_jshopping_products` SET `product_quantity` = NEW.`product_quantity` WHERE `product_id` = new.`product_id`;
END IF;
END;

Я понимаю, что что-то сделал не так, но что именно - не понимаю :).
...
Рейтинг: 0 / 0
Помогите, плз, с триггером.
    #38934297
Pawana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помошь, решение не мое, не идеальное, но рабочее:

Это итоговый триггер, изменяющий поле с остатком товара в 2 таблицах после апдейта в искомой.

delimiter $$
DROP TRIGGER IF EXISTS `sync_qt_art`;
CREATE TRIGGER `sync_qt_art` AFTER UPDATE ON `art_jshopping_products`
FOR EACH ROW
begin
select amr_jshopping_products.product_quantity into @art1 from amr_jshopping_products where product_id = new.product_id;
if new.product_quantity < @art1 then
UPDATE `amr_jshopping_products` SET `product_quantity` = NEW.`product_quantity` WHERE `product_id` = new.`product_id`;
end if;
select tls_jshopping_products.product_quantity into @art2 from tls_jshopping_products where product_id = new.product_id;
if new.product_quantity < @art2 then
UPDATE `tls_jshopping_products` SET `product_quantity` = NEW.`product_quantity` WHERE `product_id` = new.`product_id`;
end if;
end $$

Остальные триггеры - аналогичные с учетом изменения префиксов и имен переменных.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите, плз, с триггером.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]