本人开发了一款养老院签到系统,数据库是mysql ,但是遇到了无法查询的sql问题,以下是问题介绍,望各位大神们能提出宝贵方案,这款签到系统里面, 有 上班,下班,检查,巡更,4种签到状态,上班,和下班,是必须有的,检查,和巡更,可有可无,, 本来我们设计系统是没有问题的,问题在于,有些人迟到了,或者早退,他就不进行签到,他不签到的话,我就无法统计当天的异常信息, 。我设计系统是这样设计的,每个养老院有唯一 一个二维码,员工扫描二维码进行上班,下班,检查和巡逻签到,管理员先扫描二维码,设置上下班签到的时间,并且他还要让这个二维码绑定添加哪些用户,来遵守这个二维码的规则, 比如我管理员设置这个二维码,上班8:00,下班17:00,然后绑定2个用户(我专门设置了一张规则表,这张表里,这2个用户这一年所有的上下班时间都规定了,规则表de_person),然后这2个用户进行签到的话,如果今天上班签到的时间 大于 我定的那张表 那一天上班的规则,就算迟到,同理,他下班的时间 小于, 我定的那张表里的时间,就算早退,这样,就能防止,用户早退了,又不进行签到,我签到规则表里,始终有他今天的记录,
以上是介绍,
sql 文件 http://www.wenwenlove.cn/1.sql
字段说明 http://www.wenwenlove.cn/字段说明.docx
图片都在 字段说明 里
需要sql 查出当天迟到和没有签到的数据,满足条件的数据,可以不用显示出来,
我认为签到这样的问题,完全可以运用生物识别系统来代替。进门刷卡时就触发,带有时间戳,不会异常。
签到可以搞定时任务来统计
首先你可以考虑分组查询,一个人正常考勤(按4种算的话),当天的记录应该是4条。也就是少于4条的都是有缺勤等情况
首先,统计没人每天的签到次数,把结果分成3种情况, 1
然后,<1 就不说了,就是一次卡都没打 , =1 的情况就是上班或者下班没打卡 ,可以用一条时间线(12:00)来界定是迟到或者早退
设计的那么复杂,签到问题三张表就够了,第一张考勤规则表,配置上班打卡时间段,下班打卡时间段,包括考勤地点,第二张表存储考勤记录(考勤时间,考勤状态,以及其他的信息)
第三张表存储月考勤记录,字段day1-day31比如今天是7月9号,他打了上班卡,就在day9字段存储他的打卡状态,这样以后也方便统计。
如果后面又节假日不需要考勤的,再加张数据字段表,节假日的,每次存储状态的时候查一下这张表,看看是不是在节假日的时间内。
首先判断工作时间,没有签到或者为空,就表示他异常,异常按异常处理好了
刚看了一下你的表结构,把所有的考勤记录都记录在一张表,统计某个人某一天的考勤情况还可以,要是统计某个月的,或者某年的,那就。。。
根据你的表设计,如果要获取异常数据,你只需要做样做就可以:正常上班,正常下班的数据分别取出来,然后和用户表inner join 这样就可以取到正确的上下班的人员(为什么要分别取,因为防止重复签到,就像重复下班签到也会有两条正常的记录),排除这些用户,就是你要的异常用户列表了
还有一点,你的表设计,挺乱的,比如和用户表连接的字段在不同表不一样,dp_person 是p_id ,签到表又是openid,不太建议这样做