将数据类型结果从MySQL SELECT语句从varchar转换为int

时间:2016-10-19 20:14:01

标签: php mysql type-conversion insert-update database-trigger

我需要运行一个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

如果可能的话,我仍然希望通过触发方法这样做。

谢谢!

0 个答案:

没有答案