表数据和更多信息here
products_stock
通过products
列与mpn
具有外键关系。
基本概要:如果mpn
表的0
列中的available
至少比products_stock
大一行,则in_stock
列应在products
表中被触发为1以指示库存。
如果在mpn
列中将所有size
的行(/ 0
变体)设置为available
,则触发器应设置in_stock
products
上的“ 0”表示没有库存。
前者在指示库存时工作得很好,而在0
可用时后者根本不工作。我将其归结为无法通过IF rowCount < 1 THEN
声明。这是现在的触发器:
BEGIN
DECLARE rowCount INTEGER;
IF NEW.available <> OLD.available THEN
IF NEW.available > 0 AND OLD.available <= 0 THEN
UPDATE
products
SET
products.in_stock = 1
WHERE
products.mpn = NEW.mpn;
ELSEIF NEW.available <= 0 AND OLD.available > 0 THEN
SET
@rowCount := (
SELECT
COUNT(NEW.mpn)
FROM
product_stock
WHERE
product_stock.available > 0
);
IF rowCount < 1 THEN
UPDATE
products
SET
products.in_stock = 0
WHERE
products.mpn = NEW.mpn;
END IF;
END IF;
END IF;
END
我尝试了许多不同的设置@rowCount
的变体-直接位于DECLARE rowCount INTEGER;
下,嵌入IF
条件中(如上所示),并在声明中添加了另一个AND条件( product_stock.available > 0 AND product_stock.mpn = NEW.mpn);
)等等。
问题是rowCount
在进行计数时没有考虑该行的MPN,而是使用product_stock.available > 0
对所有行进行计数,而与MPN无关。
如果我取出@rowCount
,它将在products.in_stock
中触发0,但并未考虑mpn的其他变体。
是否可以修改触发器/声明的变量以仅计算mpn
列在available
上的UPDATED
?