|
|
|
Помогите, плз, с триггером.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть вот такой триггер: 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 :) Заранее благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2015, 19:29:19 |
|
||
|
Помогите, плз, с триггером.
|
|||
|---|---|---|---|
|
#18+
Для ссылки на обновлённые данные в триггере (а это всегда одна запись) нельзя использовать имя таблицы. Для этого существует алиас NEW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2015, 00:12:08 |
|
||
|
Помогите, плз, с триггером.
|
|||
|---|---|---|---|
|
#18+
Спасибо за подсказку. Исправил - заработало. Теперь у меня другая проблема, а ясности пока не добавляется :) Ситуация следующая: есь три и-магазина на джумле. Движки одинаковые, БД общая, таблицы - разные, 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; Я понимаю, что что-то сделал не так, но что именно - не понимаю :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2015, 15:45:20 |
|
||
|
Помогите, плз, с триггером.
|
|||
|---|---|---|---|
|
#18+
Спасибо за помошь, решение не мое, не идеальное, но рабочее: Это итоговый триггер, изменяющий поле с остатком товара в 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 $$ Остальные триггеры - аналогичные с учетом изменения префиксов и имен переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2015, 20:19:39 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=140&tid=1833318]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 316ms |

| 0 / 0 |
