以上是我想要做的简要概述。只需按优先顺序获取费用项目的费用类型和金额。已经支付或涵盖的费用类型项目。 我的Sqlfiddle中有3个表:
如果之前的付款已涵盖前几项,则应从当前项开始。 示例方案。如果最初支付550并且现在支付400,则应该从L.t.t开始。金额为20,E.W.C 200,R.M.I 180.因为B.E.S 250和LTT 300的一部分已经支付了
这是我的html和php代码尝试
<?php
$sql = "SELECT t.type,p.amount as payable FROM fee_types t INNER JOIN fee_periods p ON t.feetype_id = p.feetype_id
WHERE p.term_name='Term 1' AND p.class_for='Class 1' order by t.type_priority ASC ";
$result = mysql_query($sql) or die('Cannot get Info7.');
$row5 = mysql_fetch_assoc($result);
extract($row5);
$sql = "SELECT * , DATE_FORMAT( pay_date, '%d/%m/%Y' ) AS pay_date FROM fees_payment WHERE adminNo = '$adminNo' AND term_id = '$term_id'
ORDER BY pay_id DESC";
$result = mysql_query($sql) or die('Cannot get Info.');
?>
<table width="700" border="1" cellspacing="0" cellpadding="5">
<tr>
<td width="5%"><strong>ID</strong></td>
<td width="42.5%"><strong>Fee Type</strong></td>
<td width="42.5%"><strong>Amount</strong></td>
</tr>
<?php
if (mysql_num_rows($result) > 0) {
$i = 0;
while($row = mysql_fetch_assoc($result)) {
extract($row);
if ($i%2) {
$class = 'row1';
} else {
$class = 'row2';
}
$i += 1;
?>
<tr>
<td>#</td>
<td><?php if ($payable<$amount) {echo $type;} ?></td>
<td><?php echo number_format($amount,2);?></td>
</tr>
<?php
}
}
else{
echo 'No Details for now.';
}
?>
</table>
答案 0 :(得分:1)
我就是这样做的。 有这样的表结构
student_details(id,name,class..)//student table
fee_terms(term_id,class,total_fee)//Entry for fees to be paid by student in that class
fee_term_specifics(item_id,total_amount,term_id)//items paid for in that term
student_payments(stud_id,item_id,amt_paid,date_paid)//Store student payments
在输入费用支付期间,职员选择一名学生,并且系统会生成一份列表,列出未由学生支付的项目及其余额。(费用特定项目和学生支付的加入)。
让职员输入学生已经支付的总金额,系统将金额分配给特定项目,直到付款金额用尽为止。
NB :: 职员应该可以改变分配。
提交表格后,将数据保存在student_payments表中。
提示:: 拥有包含所有付款类型输入的表单,但仅显示尚未付款的付款方式。您可以使用javascript方法根据项目权重分配学生付款。还有办法处理超额付款的情况。您可以拥有一个名为超额付款的项目类型,该类型最后填写。