我目前正在构建一个每月处理一次客户帐户的付款模块。我有一个查询,它获取给定月份的所有客户付款项目,汇总金额,然后将数据发送到支付网关。这很好用,我收到银行的确认是或否。如果是,那么我需要使用发票号更新请求中的所有项目。我使用while循环获取总和,这是在发送请求之前执行的。网关只能处理单个请求,我不想为每个请求遍历每个发票项目,我宁愿对所有未完成的发票项目执行单个请求。
有些代码是:
$get_payment_items_query = mysql_query("SELECT * FROM tbl_invoice_item WHERE billing_cycle = date");
while($get_payment_items_result = mysql_fetch_assoc($get_payment_items_query)){
$invoice_amount = $invoice_amount + $get_payment_items_result['payment_amount'];
}
然后我从银行收到回复后,我在发票表中添加一条记录并获取发票ID然后执行:
$update_payment_item_query = mysql_query("UPDATE tbl_invoice_item SET status = '" . PAYMENTCOMPLETE . "', invoice_id = '$invoice_id' WHERE invoice_item_id = '" . $get_payment_items_result['invoice_item_id'] . "'");
这仅更新单个记录,因为更新查询在while循环之外。我知道有一种方法可以将记录标识符存储在字符串/数组中并执行单个更新查询,但我真的不知道这样的名称,因此无法找到示例。
我希望这是有道理的,但这里有更多细节。
有5件商品可以开具发票。我得到了5个项目的总金额。然后,我向支付网关发出一个请求,要求对这5个项目收费。银行回复是或否回复。如果是,我会为付款生成发票ID。然后,我需要使用新创建的发票ID更新5个项目。更新单个查询中的5个项目就是我被困住的地方。
提前致谢。
答案 0 :(得分:0)
我不知道我是否理解你的问题,但你可以在你的地方使用子查询。在第二个查询的位置使用第一个查询:
WHERE invoice_item_id IN(SELECT invoice_item_id FROM tbl_invoice_item WHERE billing_cycle = date)
答案 1 :(得分:0)
找到解决方案。我正在使用WHERE IN子句。
在while循环中,我创建了一个变量来保存需要更新的项目
$invoice_item_id .= $get_payment_items_result['invoice_item_id'] . ',';
然后我使用substring_replace删除最后一个逗号,然后在我使用的更新查询中
WHERE invoice_item_id IN (" . $invoice_item_array . ")
似乎工作正常。