2016-12-15 4 views
1

У меня есть следующий фрагмент ER-диаграммы.Trigger to декремент инвентаризации

Когда «order_item» обновляется (т. Е. Когда элемент добавлен в «корзину покупок»), я хочу уменьшить «количество» в таблице «itemsinstock».

Я знаю синтаксис триггера (ну, MySQL также может генерировать его), но я не знаю, как это сделать. «order_item» необходимо прочитать ItemID из «itemsinstock» и на основе этого идентификатора, ему нужно уменьшить количество для этого конкретного элемента. Это возможно?

Edit: Это то, что я сейчас:

CREATE DEFINER=`root`@`localhost` TRIGGER 
`orderdb`.`itemsinstock_AFTER_INSERT` 
AFTER INSERT ON `order_item` 
FOR EACH ROW  
BEGIN UPDATE itemsinstock 
SET Quantity = Quantity - order_item.itemQuantity WHERE itemID = ItemID; END 

Это дает мне ошибку с «order_item.itemQuantity» .... Он работал с «-1», но очевидно, что я хочу, чтобы уменьшить основанный на том, сколько «itemQuantity». Как мне это сделать?

Snippet of ER diagram

ответ

1

Довольно близко

CREATE DEFINER=`root`@`localhost` TRIGGER 
`orderdb`.`itemsinstock_AFTER_INSERT` 
AFTER INSERT ON `order_item` 
FOR EACH ROW  
BEGIN 
    UPDATE itemsinstock 
    SET Quantity = Quantity - NEW.itemQuantity WHERE itemID = NEW.id; 
END 

уведомление, как Order_Item (который не определен) заменяется NEW, который представляет собой строку, которая была вставлена. Также как побочная заметка, так как это одно утверждение, вам не нужны начальные конечные блоки

+0

Кажется, что это работает лучше, но ваше решение имеет довольно странную проблему. Он уменьшает другие предметы, даже если они не имеют одного и того же элемента. Это довольно странно, поскольку itemID отличается? – Charles

+0

Извините, я, кажется, скопировал ошибку из исходного кода. Элемент itemId в предложении where также должен быть проверен на NEW – e4c5

+0

Потому что в исходном запросе, где itemid = itemid всегда истинно. Мои извинения за это не замечают. – e4c5