$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
根据我的需要,这是正常工作的方法,但是我必须在特定条件下更新同一表中每一行的状态。看一下照片,
这是通过上面的查询插入的数据。如您所见,invoice_total_amount
是总金额,但是此金额在第三行数据中完成了。我必须更新invoice_status
字段,因为paid
高度标记的总和等于之后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条件下尝试了子查询,但这对我的查询无效。
请帮助我使用单一查询或触发器解决方案来解决它。
与计算总和的子查询联接。
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 = ?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句