私は以下の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
予告かなり近い
あなたの解決策はうまくいくようですが、あなたの解決策には奇妙な問題があります。 同じitemIDを共有していないにもかかわらず、他のアイテムも減らします。 itemIDが違うので奇妙ですね。 – Charles
申し訳ありませんが、私は元のコードから間違ってコピーしたようです。 where句のitemIdもNEW – e4c5
に対してチェックする必要があります。元のクエリでitemid = itemidが常にtrueであるためです。これに気付かなかった私の考え方。 – e4c5