2016-12-15 11 views
1

私は以下のER図のスニペットを持っています。在庫を減らすためのトリガー

「order_item」が更新されたとき(商品が「ショッピングカート」に追加されたとき)に、「itemsinstock」という表の「Quantity」を減らしたいと思います。

私はトリガーの構文をよく知っています(もちろん、MySQLもそれを生成することができます)が、どうやってそれを行うのか分かりません。 "order_item"は "itemsinstock"からItemIDを読み取る必要があり、そのIDに基づいて、その特定項目の数量を減らす必要があります。これは可能ですか?編集

: これは私が今持っているものです。

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"の数に基づいています。これはどうすればいいですか? (定義されていない)ORDER_ITEMが挿入された行を表すNEWによって置換されている方法

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 

予告かなり近い

Snippet of ER diagram

答えて

1

。これは1つのステートメントであるためサイドノートとしても、エンドブロックを開始する必要はありません

+0

あなたの解決策はうまくいくようですが、あなたの解決策には奇妙な問題があります。 同じitemIDを共有していないにもかかわらず、他のアイテムも減らします。 itemIDが違うので奇妙ですね。 – Charles

+0

申し訳ありませんが、私は元のコードから間違ってコピーしたようです。 where句のitemIdもNEW – e4c5

+0

に対してチェックする必要があります。元のクエリでitemid = itemidが常にtrueであるためです。これに気付かなかった私の考え方。 – e4c5

関連する問題