我需要运行一个select语句来从表列lineitems.quantity获取数据,将id相同的值相加并将结果保存在第二个表的列中。我的问题是lineitems.quantity的数据类型是varchar,但我需要对数据运行计算并将它们保存在invoices.totalquantity(数据类型int)中。 lineitems.quantity中的每个值都是一个整数,但是是从用户输入的文本字段派生出来的,我相信它总是以字符串值的形式出现?
至于我实现代码的地方,我要么需要使用php从MySQL中选择数据,转换类型,运行我的计算并更新发票表,或者我需要在MySQL中直接设置触发器以便列获得选中并在插入每个新的lineitems行后进行转换,计算和更新。
注意:在应用程序中单击相同的按钮后,发票表和lineitems表都会获得插入/更新,因此它们都会同时更新(但是,如果该部分发生更改,则只会更新lineitems当单击按钮时,发票总是更新的页面。
我的代码:
目前,我在应用程序方面的一些代码如下:
$sglitotalsget="SELECT (CONVERT(lineitems.quantity) as INT)as sgtotqty FROM lineitems INNER JOIN invoices on lineitems.invoiceid=invoices.id WHERE lineitems.invoiceid = ".$this->invoiceid."";
$this->db->query($sglitotalsget);
while($this->db->fetchArray($sgtotalsresult)){
$sglitotalsupdate = "UPDATE invoices SET invoices.totalquantity = ".array_sum($sglitotalsget)." WHERE invoices.id= ".$this->invoiceid."";
}
我还试图设置一个触发器但它总是失败。该代码如下:
注意:插入/更新后,触发器始终在lineitems上设置。
BEGIN
SET @totalqty = (SELECT SUM(lineitems.quantity) as qty FROM lineitems INNER JOIN invoices ON lineitems.invoiceid=invoices.id);
INSERT INTO invoices SET invoices.NEW.totalquantity = @totalqty;
END
和
BEGIN
update invoices INNER JOIN lineitems on (invoices.id=lineitems.invoiceid) SET invoices.totalquantity=SUM(lineitems.quantity) WHERE invoices.id=lineitems.invoiceid;
END
如果可能的话,我仍然希望通过触发方法这样做。
谢谢!