MySQL Trigger Sum Two列,其中userID相同

时间:2013-05-22 15:53:23

标签: mysql triggers

我有以下产品表

id | companyID | prodID | price | stock | stockAvailable | sumStock
1    A           2         10      5       4                    
2    B           2         50      10      5

当我更新将更新sumStock的产品行时,我需要触发。

我是Triggers的新手,我的尝试失败了:

CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
    ON SalesDB.Product FOR EACH ROW
BEGIN
SET Product.sumStock = Product.stock + Product.stockAvailable
END

我的目标是在这种情况下计算SUM(股票)AS stockSum,其中ProductID = 2 在这种情况下,这将是15,然后将其添加到sumStock。然后将stockAvailable列添加到该列。所以在sumStock中我会有24个。

结果将是:

id | companyID | prodID | price | stock | stockAvailable | sumStock
1    A           2         10      5       4               29     
2    B           2         50      10      5               29

1 个答案:

答案 0 :(得分:2)

试试这个语法:

CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
    ON SalesDB.Product FOR EACH ROW
BEGIN
    SET NEW.sumStock = NEW.stock + NEW.stockAvailable
END;

在表格的一行中添加。

要获得总数,您可以使用以下内容:

CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
    ON SalesDB.Product FOR EACH ROW
BEGIN
    SET NEW.sumStock = (select sum(stock + stockAvailable)
                        from products where p.prodid = new.prodid and p.id <> id
                       ) + NEW.stock + NEW.stockAvailable;
END;

除此之外,这仍然没有做你想要的。如果您一次更新多行,您将获得不同的总库存值。

换句话说,只要更新单行,就会尝试更新一组行。天哪,当这样说时,它似乎不是一个好主意。第二组udpates甚至可以更新更多行等等(因为产品不会发生)。

而是创建一个表,其中产品作为主键,并且该表中可用的库存(可能是现有表)。每次此表发生更改时,请更新摘要表。