我想对每个学生的出勤率进行计算,并显示属于每个学生的每个出勤率。以下是我的代码:
<tbody>
<?php
$counter = 1;
// SUM( `studatt_endtime` - `studatt_starttime`)= total absent contact hour
// (course_contacthour * course_contactx_perWeek * 14)= total contact hour in a week
// 14 is the total week in one semester
$data = "SELECT *,
( SELECT (SUM( `studatt_endtime` - `studatt_starttime`)/(`course_contacthour` * `course_contactx_perWeek` * 14)) FROM `studentattendance` WHERE `studAtt_status`= '0' ) AS 'sum'
FROM `student` s
INNER JOIN `studentattendance` a ON s.`stud_matric`=a.`student_stud_matric`
INNER JOIN `course` c ON c.`course_code`=a.`course_course_code`
WHERE a.`course_course_code` LIKE 'CTU101'
group by a.`student_stud_matric`;";
$result = $conn->query( $data ) or die ("Error: Something went wrong...");
if( $result ){
while( $ser=$result->fetch_object() ) {
$per=number_format($ser->sum * 100, 2);
echo "
<tr>
<td>
<center>$counter</center>
</td>
<td>$ser->stud_matric</td>
<td>$ser->stud_name</td>
<td>$per</td>
<td class='col-medium center'><a href='report.php?stud_matric=$ser->stud_matric'<button type='button' class='btn btn-sm btn-primary'><span class='glyphicon glyphicon-search'></span>View Attendance Report</button></a></td>
</tr>";
$counter++;
}
}
@mysqli_free_result( $result );
?>
</tbody>
( studatt_endtime - studatt_starttime)
指的是持有课程的时间范围。
同一个学生可能有多个不在课堂上的记录(WHERE studAtt_status= '0'
)(意味着学生缺席多次)。我使用SUM
这样我就可以达到满足( studatt_endtime - studatt_starttime)
要求的WHERE studAtt_status= '0'
。
问题是,似乎总结了每个学生缺席的整个学生小时数。例如:1号基础的学生缺席4小时。所以,他的旷工百分比必须是7.14
。
虽然2岁以上的matric学生缺席了两个小时,但他的缺勤率必须为3.57
。结论如下:(这是期望的结果)
NO MatricNo Name Percentage(%) Action
1 1 Sara 7.14 Edit
2 2 Mike 3.57 Edit
这就是我想要的。但是我从上面提到的代码中得到的是它总和的总百分比。这就是我得到的:
NO MatricNo Name Percentage(%) Action
1 1 Sara 10.71 Edit
2 2 Mike 10.71 Edit
以下是每个受影响的表中包含的属性的详细信息:
CREATE TABLE IF NOT EXISTS `studentattendance` (
`studAtt_id` varchar(45) NOT NULL DEFAULT '',
`course_course_code` varchar(45) DEFAULT NULL,
`studAtt_date` date DEFAULT NULL,
`studAtt_startTime` int(11) DEFAULT NULL,
`studAtt_endTime` int(11) DEFAULT NULL,
`classroom_classroom_code` varchar(45) DEFAULT NULL,
`semester_sem_id` int(11) DEFAULT NULL,
`group_group_code` varchar(45) DEFAULT NULL,
`staff_staff_id` bigint(11) DEFAULT NULL,
`student_stud_matric` int(11) DEFAULT NULL,
`faculty_fac_code` varchar(45) DEFAULT NULL,
`programme_prog_code` varchar(45) DEFAULT NULL,
`part_part_id` int(11) DEFAULT NULL,
`studAtt_status` tinyint(1) DEFAULT NULL;
...
CREATE TABLE IF NOT EXISTS `student` (
`stud_matric` int(11) NOT NULL DEFAULT '0',
`stud_name` varchar(100) DEFAULT NULL,
`stud_address` varchar(100) DEFAULT NULL,
`stud_email` varchar(100) DEFAULT NULL,
`stud_phone_no` varchar(45) DEFAULT NULL,
`faculty_fac_code` varchar(45) NOT NULL,
`programme_prog_code` varchar(45) NOT NULL,
`part_part_id` int(11) NOT NULL;
...
CREATE TABLE IF NOT EXISTS `course` (
`course_code` varchar(45) NOT NULL DEFAULT '',
`course_name` varchar(100) DEFAULT NULL,
`course_contacthour` varchar(45) DEFAULT NULL,
`course_credithour` varchar(45) DEFAULT NULL,
`course_contactx_perWeek` int(11) DEFAULT NULL;
然后,一些INSERTED值的样本:
INSERT INTO `studentattendance` (`studAtt_id`, `course_course_code`, `studAtt_date`, `studAtt_startTime`, `studAtt_endTime`, `classroom_classroom_code`, `semester_sem_id`, `group_group_code`, `staff_staff_id`, `student_stud_matric`, `faculty_fac_code`, `programme_prog_code`, `part_part_id`, `studAtt_status`) VALUES
('2013108193CTU1012014-12-30', 'CTU101', '2014-12-30', 14, 16, 'TEC 7', 1, 'KAC110-1B', 1234567890, 2013108193, 'AC', 'AC110', 1, 0);
('2013108193CTU1012014-12-07', 'CTU101', '2014-12-07', 12, 14, 'TEC7', 1, 'KAC110-1B', 1234567890, 2013108193, 'AC', 'AC110', 1, 1);
INSERT INTO `student` (`stud_matric`, `stud_name`, `stud_address`, `stud_email`, `stud_phone_no`, `faculty_fac_code`, `programme_prog_code`, `part_part_id`) VALUES
(2013108193, 'sara', '', '', '', 'AC', 'AC110', 1);
INSERT INTO `course` (`course_code`, `course_name`, `course_contacthour`, `course_credithour`, `course_contactx_perWeek`) VALUES
('CTU101', 'FUNDAMENTALS', '2', '2', 2);
如果我需要提供更多信息,请告诉我.TQ