CodeIgniter框架下学生出勤百分比查询与提交考勤自动入库实现问询
CodeIgniter考勤系统出席率功能实现方案
核心需求
- 查询每名学生的出席考勤占比,展示出席次数百分比
- 提交考勤时自动计算每名学生的出席百分比并存入数据库
代码修改说明
你需要在现有take_attendance方法中新增出席率计算逻辑,在每日考勤数据写入/更新完成后,逐个统计学生当前学期的所有考勤数据计算占比,再写入数据库即可,修改后完整代码如下:
public function take_attendance() { $students = $this->input->post('student_id'); $data['timestamp'] = strtotime($this->input->post('date')); $data['class_id'] = html_escape($this->input->post('class_id')); $data['section_id'] = html_escape($this->input->post('section_id')); $data['school_id'] = $this->school_id; $data['session_id'] = $this->active_session; $check_data = $this->db->get_where('daily_attendances', array('timestamp' => $data['timestamp'], 'class_id' => $data['class_id'], 'section_id' => $data['section_id'], 'session_id' => $data['session_id'], 'school_id' => $data['school_id'])); if($check_data->num_rows() > 0){ foreach($students as $key => $student): $data['status'] = $this->input->post('status-'.$student); $data['student_id'] = $student; $attendance_id = $this->input->post('attendance_id'); $this->db->where('id', $attendance_id[$key]); $this->db->update('daily_attendances', $data); endforeach; }else{ foreach($students as $student): $data['status'] = $this->input->post('status-'.$student); $data['student_id'] = $student; $this->db->insert('daily_attendances', $data); endforeach; } // 新增:自动计算每名学生的出席百分比并存入数据库 foreach ($students as $student_id) { // 统计当前学期该学生的总考勤次数 $total_attendance = $this->db->get_where('daily_attendances', [ 'student_id' => $student_id, 'session_id' => $this->active_session, 'school_id' => $this->school_id ])->num_rows(); // 统计当前学期该学生的出席次数(status为1代表出席,可根据你的实际字段值调整) $present_attendance = $this->db->get_where('daily_attendances', [ 'student_id' => $student_id, 'session_id' => $this->active_session, 'school_id' => $this->school_id, 'status' => 1 ])->num_rows(); // 计算出席百分比,保留2位小数 $attendance_percent = $total_attendance > 0 ? round(($present_attendance / $total_attendance) * 100, 2) : 0; // 将百分比存入数据库,此处假设你将百分比存在student表的attendance_percent字段,可根据你的实际表结构调整 $this->db->where('id', $student_id); $this->db->update('student', ['attendance_percent' => $attendance_percent]); } $this->settings_model->last_updated_attendance_data(); $response = array( 'status' => true, 'notification' => get_phrase('attendance_updated_successfully') ); return json_encode($response); }
查询学生出席率方法
你可以在同模型中新增如下方法,用于前端查询展示学生出席率:
public function get_student_attendance_percent($student_id) { return $this->db->get_where('student', [ 'id' => $student_id, 'school_id' => $this->school_id ])->row()->attendance_percent ?? 0; }
注:如果你的出席百分比存储在其他表,可自行调整上述代码中的表名和字段名,status字段的出席标识也可根据你实际业务定义修改。
内容的提问来源于stack exchange,提问作者zak
相关产品推荐
相关产品推荐

