php人事考勤系统,基于PHP&MySQL的考勤系统

匿名用户

我不确定是否应该用这些更新来编辑问题。但这是我提出的部分解决方案。我会很高兴有人能帮助优化这个更多。

所以,我从这段代码开始。SELECT timeid

FROM timetable

WHERE flag > ?

AND semester = ?

AND section = ?

AND timeid BETWEEN ? AND ?

从上面的代码,我可以得到日期的类采取。接下来,我检查一个学生是否在下面提到的日期出席或缺席:SELECT attended FROM attendancetable

WHERE s_id = ?

AND semester = ?

AND timeid = ?

有了这个,我就可以看到一个学生是否缺席了。在php中,它看起来如下所示://Getting the dates

$query = "SELECT timeid FROM timetable

WHERE flag > ?

AND semester = ?

AND section = ?

AND timeid BETWEEN ? AND ?";

$params = array(0, 1, 'A', '2017-01-01', '2017-06-30' );

$stmt = $db->prepare($query);

$stmt->execute($params);

$dates = $stmt->fetchall();

//checking if students is present or absent

$query = "SELECT attended FROM attendancetable

WHERE s_id = ?

AND semester = ?

AND timeid = ?";

//Now I'm going to loop through the $dates

foreach($dates as $date){

$params = array(1, 'A', $date['timeid']);

$stmt = $db->prepare($query);

$stmt->execute($params);

$result = $stmt->fetchall();

($result) ? $present = 1 : $present = 0;

}

通过上面的方法,我能够计算出某一段的学生是否按照课程表出席/缺席某一节课。现在,如果我想要一节中的所有学生,我可以首先查询student_info表,然后为每个学生计算foreach循环SELECT class_roll FROM student_info

WHERE logYear = ?

AND section = ?

AND deleted = ?

ORDER BY class_roll LIMIT ?, ?

然后,每个学生都运行foreach循环,以检查他们是否缺席或在场。最后,我可以得到这个:

468e1fa501bb6ef46cf62f7f28552e1c.png

我在本地测试了大约200个学生的执行时间,当类只有39个时,执行时间大约为1.6秒。我也用以前的数据测试了一整个学期,代码超过30秒,触发了max_execution_time错误。到现在为止,我设定了每页25个学生数量的限制。

更新:max_execution_time错误似乎只在第一次运行时出现,但后来当我尝试重新生成它的not giving neyer错误时,完成任务所花的时间不到2秒。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值