CodeIgniter中不使用查询构建器统计各医生未付欠款总额并展示
解决CodeIgniter中统计医生未付欠款总额的问题
看起来你现在是要把分散的未付薪资按医生汇总展示,而不是列出每一笔单独的未付记录对吧?不用查询构建器的话,直接调整SQL语句做分组统计就可以轻松搞定,下面是具体的修改步骤:
1. 修改控制器中的查询逻辑
把原来的查询语句改成按医生分组并计算总额的形式,假设你的salaries表包含医生姓名(doctor_name)、薪资金额(salary_amount)这些核心字段,调整后的控制器代码如下:
public function pay_salaries() { // 按医生分组统计未付欠款总额,仅保留未付款项 $salary['salaries'] = $this->db->query(" SELECT doctor_name, SUM(salary_amount) AS total_unpaid, COUNT(salary_id) AS unpaid_record_count -- 可选:显示该医生的未付笔数 FROM salaries WHERE Payment_status IS NULL GROUP BY doctor_name ORDER BY total_unpaid DESC ")->result_array(); $this->load->view('backend/admin/pay_salaries', $salary); }
补充说明:
如果你的数据库是用doctor_id关联独立的医生表(更规范的设计),建议用doctor_id分组并关联医生表获取姓名,避免同名医生统计错误:
SELECT d.doctor_name, SUM(s.salary_amount) AS total_unpaid FROM salaries s JOIN doctors d ON s.doctor_id = d.doctor_id WHERE s.Payment_status IS NULL GROUP BY d.doctor_id, d.doctor_name ORDER BY total_unpaid DESC
2. 调整视图的展示内容
在你的视图文件pay_salaries.php中,更新表头和循环逻辑,展示每个医生的汇总数据:
<thead> <tr> <th>DOCTOR'S NAME</th> <th>TOTAL UNPAID AMOUNT</th> <th>UNPAID RECORDS</th> <!-- 可选字段,对应上面的unpaid_record_count --> <th>ACTION</th> <!-- 可添加操作按钮,比如查看该医生的每一笔未付记录 --> </tr> </thead> <tbody> <?php foreach($salaries as $row): ?> <tr> <td><?= htmlspecialchars($row['doctor_name']) ?></td> <td><?= number_format($row['total_unpaid'], 2) ?></td> <!-- 格式化金额为两位小数,更符合财务展示习惯 --> <td><?= $row['unpaid_record_count'] ?? '-' ?></td> <!-- 可选字段,兼容未统计笔数的情况 --> <td> <!-- 示例:添加查看详情按钮,跳转到该医生的所有未付记录页面 --> <a href="<?= base_url('admin/doctor_unpaid_details/' . $row['doctor_id']) ?>" class="btn btn-sm btn-info">View Details</a> </td> </tr> <?php endforeach; ?> </tbody>
视图细节提醒:
- 用
htmlspecialchars()包裹输出内容,防止XSS攻击,确保页面安全 number_format()可以让金额显示更规范,适合薪资类的财务场景- 如果需要查看某医生的每一笔未付明细,可以额外实现一个控制器方法来处理详情跳转
这样修改后,页面就会清晰展示每位医生的未付欠款总额,而不是零散的单条记录啦。
内容的提问来源于stack exchange,提问作者Max BigBudget
相关产品推荐
相关产品推荐

