Я хочу сделать расчет процента посещаемости каждого ученика, и он будет отображать каждый процент посещаемости, который принадлежит каждому ученику. Ниже мой код:
<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 отсутствует в течение двух часов, поэтому его процент отсутствия на работе должен быть 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
Задача ещё не решена.
Других решений пока нет …