php - foreach中foreach计算错误
问题描述
我有两张桌子。其中一个称为“客户”,另一个称为“活期帐户”。
我想要做; 收集客户表中记录的当前帐户表中的借方和贷方列的数据并得出结果。但不知何故,我无法进行正确的计算。我在下面留下我的示例代码。
预先感谢您对我们的支持。
Table Name : Customer Table name : Current Account
| tax | company_name |tax_no| debt | take
______________________ _________________________
| 1234| Company One |1234 | 9 |
| 5678| Company Second |1234 | | 3
|1234 | 15 |
|5678 | 4 |
|5678 | | 1
根据上表,我要做的就是根据客户表中的数据,结合当前账户表中的数据,从应收账款中取出欠款,得到结果。
// Data list
$sql = $db->query("SELECT*FROM customer ORDER BY company_name ASC");
$sum_debt = 0;
$sum_take = 0;
foreach($sql->results() as item){
$tax = $item->tax;
$current = $db->query("SELECT*FROM current_account WHERE tax_no = '$tax' ");
foreach($current->results() as $row){
$sum_debt += $row->debt;
$sum_take += $row->take;
$res = $sum_take - $sum_debt;
}
}
结果总是错误的。它通过对第一个数据进行正确操作得出结论。它收集下一个数据的第一个结果。
根据表格应得到的结果;公司一是:-24,公司二是-3,但第二个数据是-27。
解决方案
如果 $res 应该包含客户的当前帐户余额,您需要将 $res 的计算移到内部 for 循环之外,并为每个客户重置 sum_debt 和 sum_take:
$sql = $db->query("SELECT*FROM customer ORDER BY company_name ASC");
//for loop for each customer
foreach($sql->results() as item){
$sum_debt = 0; //debt of this customer
$sum_take = 0; //credit of this customer
$tax = $item->tax;
$current = $db->query("SELECT*FROM current_account WHERE tax_no = '$tax' ");
foreach($current->results() as $row){
$sum_debt += $row->debt;
$sum_take += $row->take;
}
$res = $sum_take - $sum_debt; //account balance of this customer
}
您还可以通过直接计算帐户余额来简化代码:
$sql = $db->query("SELECT*FROM customer ORDER BY company_name ASC");
//for loop for each customer
foreach($sql->results() as item){
$balance_of_this_customer = 0;
$tax = $item->tax;
$current = $db->query("SELECT*FROM current_account WHERE tax_no = '$tax' ");
foreach($current->results() as $row){
$balance_of_this_customer -= $row->debt;
$balance_of_this_customer += $row->take;
}
}
推荐阅读
- java - Java:for in for,相同的arraylist和比较
- ruby-on-rails - 如何为图像的回形针宝石验证添加 rspec
- php - PHP Mysqli 总是返回 0 行
- sql-server - 确定最终的 Windows 用户
- artifactory - jfrog rt glc 在 refs/remotes/* 中搜索匹配的工件存储库文件。git lfs 将这些文件放在 lfs\objects
- xslt - 尝试在结果文档中删除元素并重新排序元素
- javascript - 防止 VueX 中的持久状态锁定应用程序
- python - 尽管 em 在 $PATH 中,Sphinx 找不到模块
- ios - 将文本设置为 shouldChangeCharactersIn 内的 UITextField 后,光标结束
- opencv - 如何通过 OpenCV 验证标记特征是否正确跟踪视频中的对象?