Mysql 签到问题,得到用户签到结果 80C

本人开发了一款养老院签到系统,数据库是mysql ,但是遇到了无法查询的sql问题,以下是问题介绍,望各位大神们能提出宝贵方案,这款签到系统里面, 有 上班,下班,检查,巡更,4种签到状态,上班,和下班,是必须有的,检查,和巡更,可有可无,, 本来我们设计系统是没有问题的,问题在于,有些人迟到了,或者早退,他就不进行签到,他不签到的话,我就无法统计当天的异常信息, 。我设计系统是这样设计的,每个养老院有唯一 一个二维码,员工扫描二维码进行上班,下班,检查和巡逻签到,管理员先扫描二维码,设置上下班签到的时间,并且他还要让这个二维码绑定添加哪些用户,来遵守这个二维码的规则, 比如我管理员设置这个二维码,上班8:00,下班17:00,然后绑定2个用户(我专门设置了一张规则表,这张表里,这2个用户这一年所有的上下班时间都规定了,规则表de_person),然后这2个用户进行签到的话,如果今天上班签到的时间 大于 我定的那张表 那一天上班的规则,就算迟到,同理,他下班的时间 小于, 我定的那张表里的时间,就算早退,这样,就能防止,用户早退了,又不进行签到,我签到规则表里,始终有他今天的记录,

以上是介绍,

sql 文件 http://www.wenwenlove.cn/1.sql

字段说明 http://www.wenwenlove.cn/字段说明.docx

10个回答

图片都在 字段说明 里

需要sql 查出当天迟到和没有签到的数据,满足条件的数据,可以不用显示出来,

我认为签到这样的问题,完全可以运用生物识别系统来代替。进门刷卡时就触发,带有时间戳,不会异常。

qq_28295689
qq_28295689 这个可以考虑,但是目前没有这样设计
大约 2 年之前 回复

签到可以搞定时任务来统计

首先你可以考虑分组查询,一个人正常考勤(按4种算的话),当天的记录应该是4条。也就是少于4条的都是有缺勤等情况

liuyang1835189
猕猴吃的桃 缺勤,或者异常各种状态的天数应该作为字段存储在考勤记录表里,每次打卡,跟新状态的同时也该更新那个字段
大约 2 年之前 回复
qq_28295689
qq_28295689 签到分过组了,我都试过
大约 2 年之前 回复

首先,统计没人每天的签到次数,把结果分成3种情况, 1
然后,<1 就不说了,就是一次卡都没打 , =1 的情况就是上班或者下班没打卡 ,可以用一条时间线(12:00)来界定是迟到或者早退

cyq11512
cyq11512 回复qq_28295689: 最简单的方式就是,你在de_person 中加一个字段,做为上下班打卡标识,即每天每人第一次打卡标记为上班打卡,其他打卡记录全部标记为下班打卡,然后统计的时候按这个字段进行分类,然后再来判断迟到早退
大约 2 年之前 回复
qq_28295689
qq_28295689 小哥哥,请将这个sql写出来,万分感谢
大约 2 年之前 回复

设计的那么复杂,签到问题三张表就够了,第一张考勤规则表,配置上班打卡时间段,下班打卡时间段,包括考勤地点,第二张表存储考勤记录(考勤时间,考勤状态,以及其他的信息)
第三张表存储月考勤记录,字段day1-day31比如今天是7月9号,他打了上班卡,就在day9字段存储他的打卡状态,这样以后也方便统计。
如果后面又节假日不需要考勤的,再加张数据字段表,节假日的,每次存储状态的时候查一下这张表,看看是不是在节假日的时间内。

liuyang1835189
猕猴吃的桃 回复m0_37863265: 我这边打开上面的文件全是乱码,
大约 2 年之前 回复
m0_37863265
奇诺比奥 他也是三张表,和你差不多
大约 2 年之前 回复

首先判断工作时间,没有签到或者为空,就表示他异常,异常按异常处理好了

刚看了一下你的表结构,把所有的考勤记录都记录在一张表,统计某个人某一天的考勤情况还可以,要是统计某个月的,或者某年的,那就。。。

liuyang1835189
猕猴吃的桃 如果要查看这一天具体的考勤时间,包括考勤地点,或者是其他信息,只要到你的那个sign那张表里,根据时间当前时间,比如今天是7月9号,那就2018-07-09<signTime<2018-07-10;今天的所有考勤信息都会出来。
大约 2 年之前 回复
liuyang1835189
猕猴吃的桃 后面一个月的签到,我只根据这个userid更新这条月记录就行,因为这条记录记录一个月的每天考勤状态。
大约 2 年之前 回复
liuyang1835189
猕猴吃的桃 回复qq_28295689: userid,year,month,day1,day2…….day31,exceptionNum(代表异常天数),normalNum(正常签到天数),后面再加啥的巡逻站岗天数啥的字段 比如我签到的时候今天是7月9号,那就新增一条记录,记录 这个人的userid,year(2018),month(7)day1至day31初始化值都是1,今天签到上班,那就把day9的值变成2,如果签到了上班或者下班,或者一天都没签到那就更新异常天数这个字段+1,如果他签到了下班,那就把异常天数-1,正常签到天数+1这样,后面,算某天是否异常的时候,直接查询这个sign_month_record这张表的记录比如这个天9号,看下这day9的状态值,是否1,2,3,4啥的,就查询这张表,包括统计这个月的,都很方便。
大约 2 年之前 回复
liuyang1835189
猕猴吃的桃 回复qq_28295689: 所以啊,不需要那样,只要加个月记录考勤表,比如表名就叫sign_month_record,里面的字段
大约 2 年之前 回复
qq_28295689
qq_28295689 谢谢你看过,我设计这一块是听一个朋友说的,我当时和朋友说,如果有人不签到的话,我们的系统就没有他的记录,这样,异常报表的时候,就根本查不到,他和我说,需要设计一张规则表,比如规则表里,那个人每天有上下班,2笔记录,然后我在用他实际今天签到的记录,和规则表进行,左右连接,就可以显示异常的那一天,我现在就是卡在那个左右连接上
大约 2 年之前 回复

根据你的表设计,如果要获取异常数据,你只需要做样做就可以:正常上班,正常下班的数据分别取出来,然后和用户表inner join 这样就可以取到正确的上下班的人员(为什么要分别取,因为防止重复签到,就像重复下班签到也会有两条正常的记录),排除这些用户,就是你要的异常用户列表了
还有一点,你的表设计,挺乱的,比如和用户表连接的字段在不同表不一样,dp_person 是p_id ,签到表又是openid,不太建议这样做

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问