计算百分比

时间:2015-11-12 08:33:32

标签: php mysqli sum percentage

我想对每个学生的出勤率进行计算,并显示属于每个学生的每个出勤率。以下是我的代码:

<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

0 个答案:

没有答案