0

我目前正在构建一个每月处理一次客户帐户的支付模块。我有一个查询,它获取给定月份的所有客户付款项目,对金额求和,然后将数据发送到支付网关。这很好用,我收到银行的回复确认是或否。如果是,那么我需要使用发票编号更新请求中的所有项目。我正在使用 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 个项目是我卡住的地方。

提前致谢。

4

2 回答 2

0

找到了解决方案。我正在使用 WHERE IN 子句。

在 while 循环中,我创建一个变量来保存需要更新的项目

$invoice_item_id .= $get_payment_items_result['invoice_item_id'] . ',';

然后我使用 substring_replace 删除最后一个逗号,然后在我使用的更新查询中

WHERE invoice_item_id IN (" . $invoice_item_array . ")

似乎工作正常。

于 2012-10-11T03:19:07.650 回答
0

我不知道我是否正确理解了您的问题,但您可以在 where 中使用子查询。在第二个查询的位置使用第一个查询:

WHERE invoice_item_id IN (SELECT invoice_item_id FROM tbl_invoice_item WHERE billing_cycle = date)

于 2012-10-11T02:56:46.847 回答