更新后的MySQL和插入后的触发器在输入行时失败

时间:2016-10-14 15:22:29

标签: php mysql database triggers

我需要创建一个MySQL触发器,它将一个表中两列的值相乘,并将该结果保存在另一个表的列中。我有一个名为lineitems的表,可以输入产品尺寸。我需要将每个lineitem行的高度和宽度相乘,如果它们是相同订单号的一部分,则将它们加在一起,并将结果保存在名为发票的表的sqft列中。每次lineitems表获取新行或更新现有行时,我都需要这样做。我还需要对每个lineitem行的项目数量进行非常类似的处理。最后,我需要进行第三次计算,计算每种产品的重量并存储在lineitems表中。但是,该权重计算涉及第三个表(layup_config),以仅为所订购的特定产品中使用的层导出权重。

代码:

我已尝试在发票表AFTER INSERT和AFTER UPDATE之后以及在INSTER INSERT和AFTER UPDATE之后的lineitems表上设置此触发器。但是,如果可能的话,我希望在lineitems表中发生这种情况。

注意:我正在使用phpmyadmin访问和操作我的表触发器,以便程序有一个表单,可以生成正确的触发器格式,例如" CREATE TRIGGER' triggername' ...等等。用户与之交互以进入每一行的程序是使用PHP将数据发送到MySQL。

    BEGIN
    INSERT INTO invoices SET invoices.totalquantity=SUM(lineitems.quantity) WHERE invoices.id=lineitems.invoiceid;
    INSERT INTO invoices SET invoices.totalsqft = ((SUM( lineitems.quantity ))*((lineitems.width + lineitmes.widthf)*(lineitems.height+lineitems.heightf))) WHERE invoices.id = lineitems.invoiceid;
    INSERT INTO lineitems SET lineitems.unitweight = SUM(layup_config.weight) WHERE layup-config.parentid IN (SELECT lineitems.productid FROM lineitems WHERE lineitems.invoiceid=invoices.id AND lineitems.displayorder=0);
    END

我还尝试了以下代码而不是之前的代码:

    //Inserts new invoice row but not lineitems data
    BEGIN
    SET @totalqty = (SELECT SUM(lineitems.quantity) FROM lineitems INNER  JOIN invoices ON lineitems.invoiceid=invoices.id);
    INSERT INTO invoices SET invoices.NEW.totalquantity = @totalqty;
    END

我认为我遇到的问题是输入lineitems表数据的部分与保存发票表数据的代码位于同一页面上。但是,两者都在相同的情况下更新"保存"单击按钮。我想我在尝试保存所需的lineitems表之前尝试更新发票表。

例如:输入发票数据,发票触发器在输入lineitems数据之前运行但需要使用lineitems数据,因此失败。

我认为在lineitems表上设置触发器是正确的方法,但我似乎无法让触发器在该表中正常工作......

请帮助!!!!!

谢谢!

0 个答案:

没有答案