2014-01-09 70 views
5
$stmt = "insert into {CI}payment_logs (customer_id, invoice_id, invoice_total_amount, invoice_paid_amount, customer_paid_amount, invoice_payment_on) " 
       . "values(?, ?, ?, ?, ?, NOW())"; 
$this->db->query($stmt, array($Customer_Id, $Invoice_Id, $Invoice_Total_Amount, $Deducted_Amount, $Paid_By_Cust));   
$Log_Id = $this->db->insert_id(); // Returns Last Insert ID 

这是根据我的需要工作正常,但我必须更新在特定条件下在同一个表中的每一行的状态。就拿上的图片一看,插入查询后更新状态

Insert Query

这是上面的查询插入的数据。正如您在invoice_total_amount中看到的是总金额,但此金额在第三行数据中完成。我必须将invoice_status字段更新为paid,高度点亮量SUM等于invoice_total_amount,其余字段中我必须更新状态partial。我试图更新状态来添加一个触发器,但没有成功。

然后我用这个命令用PHP试过。

update {CI}payment_logs 
    set invoice_status = IF(invoice_total_amount = sum(invoices_paid_amount), 'paid', 'partial') 
where log_id = ? 

,但我没有得到的invoices_paid_amount其中INVOICE_ID = 5,我试图用IF条件子查询中的SUM,但它是无效的我的查询。

请帮我带单查询或触发解决解决吧..

回答

4

加入与计算校验和一个子查询。

UPDATE {CI}payment_logs l1 
JOIN (SELECT invoice_id, SUM(invoices_paid_amount) total 
     FROM {CI}payment_logs 
     GROUP BY invoice_id) l2 
ON l1.invoice_id = l2.invoice_id 
SET invoice_status = IF(invoice_total_amount = total, 'paid', 'partial') 
WHERE log_id = ? 
+0

+1太棒了,谢谢你。 –