使用循环更新db表

时间:2013-09-13 09:06:00

标签: php mysql database

enter image description here

`SI_ID is` the Auto Increment Field
`SI_Reg_No` i the student registration number 
`SI_Ins_NO` is the installment number 
`SI_Due_Date` is the due date of that installment 
`SI_Paid_Amount` is the paid amount of each installment

当我的付款表单按钮单击时,我想更新SI_Paid_Amount字段。当我点击付款字段时,表格数据已加载,而没有SI_Paid_Amount。

$amount = 5000.00 // this is what i send to the db for update `SI_Paid_Amount`

如果SI_paid_Amount应该像bellow一样更新

从第一个SI_Ins_No开始,如果SI_Ins_amount大于$amount,它应该更新Si_Paid_Amount字段,它应该停止循环。像贝娄一样

enter image description here

如果SI_Ins_Amount小于发送金额,则应更新第二个SI_Ins_No相关SI_Paid_Amount列。并且在将数据发送到SI_Paid_Amount时,我们要根据以前SI_Paid_Amounts检查金额SI_Ins_No。所以我的问题是我如何用PHP做到这一点???

1 个答案:

答案 0 :(得分:6)

我已经和这个人谈过聊天,并发现了他的追求。基本上它是一个学生可以支付分期付款的表,但他们可以批量或其他任何方式支付。

实施例: 所以我欠了15000,10000和5000的3期。我支付17000英镑,它根据ASC订单中的SI_Ins_No从我的3期中扣除了15000。因此,它会将SI_ID#1和2000中支付的金额加到5000到SI_ID#2

我写了一个小解决方案来帮助

// $rows = "SELECT *, (`SI_Ins_Amount` - `SI_Paid_Amount`) as owed FROM `student_installments` WHERE (`SI_Ins_Amount` + `SI_Paid_Amount`) != 0 AND `SI_Reg_No` = 'COL/A-000041' ORDER BY `SI_Ins_NO` ASC";

$rows = array();
$rows[0]['SI_ID'] = 1;
$rows[0]['SI_Reg_no'] = 'COL/A-000041';
$rows[0]['SI_Ins_Amount'] = '15000';
$rows[0]['SI_Paid_Amount'] = '0';
$rows[0]['owed'] = '15000';
$rows[1]['SI_Ins_NO'] = '1';

$rows[1]['SI_ID'] = 2;
$rows[1]['SI_Reg_no'] = 'COL/A-000041';
$rows[1]['SI_Ins_Amount'] = '10000';
$rows[1]['SI_Paid_Amount'] = '0';
$rows[1]['owed'] = '10000';
$rows[1]['SI_Ins_NO'] = '2';

$rows[2]['SI_ID'] = 2;
$rows[2]['SI_Reg_no'] = 'COL/A-000041';
$rows[2]['SI_Ins_Amount'] = '5000';
$rows[2]['SI_Paid_Amount'] = '0';
$rows[2]['owed'] = '5000';
$rows[1]['SI_Ins_NO'] = '3';

$amount = 27000;
foreach($rows as $r) {
    // There's money left
    if($r['owed'] - $amount < 0) {
        $paying = $r['owed'];
        $amount -= $r['owed'];
    } else {
        // No money left
        $paying = ($r['SI_Paid_Amount' + $amount);
        $amount -= $paying;
    }

    // If there's money left
    if($paying > 0) { 
       echo "UPDATE `student_installments` SET `SI_Paid_Amount` = '".$paying."' WHERE `SI_ID` = '".$r['SI_ID']."' \n";
   }
}

请随意改进,因为它只是一种快速粗略的方法。

您可以测试此here

你需要添加自己的东西,例如检查金额是否正确,确保它们不会支付太多等等......