You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复各科室医生数量统计始终显示为0的问题?

科室医生数量统计始终为0的排查与解决

一、数据层面排查

  • 检查doctor表的department_id字段值:
    虽然你添加了department_id外键字段,但如果旧数据未更新、新医生记录未正确关联科室ID,统计结果必然为0。执行以下SQL验证:

    SELECT COUNT(*) FROM doctor WHERE department_id = [你的科室ID];
    

    如果结果为0,说明该科室下的医生记录未正确设置department_id。需要批量更新旧数据(比如根据原department字段匹配科室表的id),同时确保新增医生时正确填充department_id。

  • 注意引擎限制:
    你的表使用MyISAM引擎,该引擎不支持外键约束,即使添加了外键规则也不会生效,可能导致department_id被填入无效值(如不存在的科室ID或NULL)。建议将表引擎改为InnoDB,并重新添加外键约束:

    ALTER TABLE department ENGINE=InnoDB;
    ALTER TABLE doctor ENGINE=InnoDB;
    

二、模型函数修复

当前模型函数存在两个问题:无医生时会报错、多次查询效率低。修改如下:

public function getDoctorsCountByDepartment($department_id) {
    $this->db->select('COUNT(*) as doctor_count');
    $this->db->from('doctor');
    $this->db->where('department_id', $department_id);
    $query = $this->db->get();
    
    // 处理无结果的情况,避免报错并返回0
    $row = $query->row();
    return $row ? (int)$row->doctor_count : 0;
}

更高效的批量统计方案(推荐)

避免循环调用查询,一次性统计所有科室的医生数,减少数据库交互:

public function getAllDepartmentsWithDoctorCount() {
    $this->db->select('d.id, d.name, d.description, COUNT(doc.id) as doctor_count');
    $this->db->from('department d');
    $this->db->join('doctor doc', 'd.id = doc.department_id', 'LEFT');
    $this->db->group_by('d.id');
    return $this->db->get()->result();
}

控制器中直接调用这个方法即可,无需循环:

public function showDepartmentsWithDoctorCount() {
    $this->load->model('department_model'); 
    // 直接获取带统计的科室数据
    $data['departments'] = $this->department_model->getAllDepartmentsWithDoctorCount();
    $this->load->view('department_view', $data);
}

三、视图代码清理

视图中存在一段冗余且无效的代码,直接删除即可:

$doctors_count_by_department=array();
foreach ($doctors_count_by_department as $count) {
    if ($count->department == $department->id) {
        $doctor_count = $count->doctor_count;
        break;
    }
}

这段代码定义了空数组并循环,完全不会影响结果,删除后不影响统计值展示。

四、控制器方法名优化

控制器中的方法名getDoctorsCountByDepartment与模型方法名重复,容易混淆,建议改为更清晰的名称(如上面的showDepartmentsWithDoctorCount),避免命名冲突。


内容的提问来源于stack exchange,提问作者Oli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:34:58