PHP / MySQL结果处理多个记录

时间:2012-10-11 02:47:07

标签: php mysql

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

提前致谢。

2 个答案:

答案 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 . ")

似乎工作正常。