Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггеры в MySQL / 9 сообщений из 9, страница 1 из 1
17.06.2015, 14:04:18
    #38985817
Волk123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
Необходимо написать триггер на изменение суммы ячейки одной таблицы, сформированной из другой.

изделие
стоимость изготовления
общая стоимость


состав изделия
материал 1 ! цена
материал 2 ! цена
..................
материал N ! Сумма


при любых изменениях общая стоимость должна соответсвенно меняться
...
Рейтинг: 0 / 0
17.06.2015, 14:15:25
    #38985830
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
...
Рейтинг: 0 / 0
17.06.2015, 16:22:03
    #38985989
Волk123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
miksoft,
sorry, im not speak english.
...
Рейтинг: 0 / 0
17.06.2015, 16:25:20
    #38985993
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
Волk123miksoft,
sorry, im not speak english.Говорить там и не требуется, только читать.

Вы обозначьте проблему конкретнее, что именно пробовали и что именно не получилось.
...
Рейтинг: 0 / 0
17.06.2015, 17:03:23
    #38986053
Волk123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create  trigger price_prod
on met_material_on_product after insert, update, delete
as
begin

  if (not(exists(select * from [inserted]))) -- ничего не вставляли
    if (not(exists(select * from [deleted]))) -- ничего не удаляли
      return; -- реально не было никаких изменений, оставим заказы в покое.

  update З set Price =
    ( select sum(a.Price)
      from met_material_on_product a
      where a.ID_poduct = З.ID_product
    ) 
  from Product З
  where З.ID_product in
    ( -- Высичляем ID задетых заказов, сумму которых надо пересчитать
      select ЗаказID from inserted [new] -- что-то добавили в заказ
      union all
      select ЗаказID from deleted  [old] -- что-то убрали из заказа
    )

end
go
...
Рейтинг: 0 / 0
17.06.2015, 17:07:29
    #38986060
Волk123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
Денвер выдал ошибку, из за того, что слишком много полей (insert,update, delete)
Я разобрал каждый отдельно, но там связка IF мешает, попробовал переделать и неполучается.
Я впервые решил триггер написать, точнее скатать)
...
Рейтинг: 0 / 0
17.06.2015, 17:11:42
    #38986069
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
Волk123,

А что у вас за СУБД? Диалект явно не от MySQL.
...
Рейтинг: 0 / 0
17.06.2015, 20:22:30
    #38986262
Волk123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
miksoft,

я нашел подходящий вариант, все в точности как у меня, кроме СУБД
...
Рейтинг: 0 / 0
19.06.2015, 18:54:17
    #38988485
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры в MySQL
Волk123,

тебе надо не так ити...

тригер на вставку - данные в NEW
код тригера по типу

update target_table set total_price = total_price + NEW.price
тоесть итоговая цена увеличилась на цену добавленого елемента

тригер на делете полностью аналогично, только удаляемая строка находиться в OLD

и тебе надо не добавлять а уменьшать - итоговая цена уменьшаеться на цену удалённого.

в тригере на апдейт у тебя старые значения обновляемой строки в OLD, новые в NEW
это тупо комбинация двух выше...

update target_table set total_price = total_price - OLD.price + NEW.price
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггеры в MySQL / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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