问题描述
初学Java,正在用Swing做一个学生考勤系统,目前只完成了简单的增删改,在要做 查 的时候,遇到这样一个问题:怎么从表中查询到总的考勤情况(比如,能查第一周至当前周的总的考勤),又可以查询到任意一周的考勤情况。这样的数据库要如何设计呢? 恳请解答,谢谢了。 问题补充:7454103 写道
解决方案
当然,如果是我的话,数据库可能不是这样设计了我会把 迟到,早退,旷课,病假,事假,公假放在一个字段,可以为整形,这样要知道 1,2,3...表示什么意思,也可以用varchar型,直接放迟到,早退等,再加个字段,用于说明一些情况,CREATE TABLE attendance( id INT AUTO_INCREMENT PRIMARY KEY, 姓名 INT NOT NULL, 考勤类型 VARCHAR(4) NOT NULL, 考勤说明 VARCHAR(50) ,销假情况 VARCHAR(50) NOT NULL logTime dateTime not null;); 某人的总的情况 select * from attendance where 姓名 = 2某人任一周的情况 select * from attendance where 姓名 = 2 and logTime between dt and DateAdd(d,7,dt);如果要查某个在这个时间段内迟到多少次某人任一周的情况 select * from attendance where 姓名 = 2 and logTime between dt and DateAdd(d,7,dt) and 考勤类型='迟到';
解决方案二:
引用迟到,早退,旷课,病假,事假,公假放在一个字段, 可以为整形,这样要知道 1,2,3...表示什么意思这样做是合理的 ! 不过 你那样做也是 可以的!要知道 需求不一定合理! 看情况而定吧! 你熟悉或者喜欢哪种都行!至于你说的那个 统计和 查询一周的 sql 这么写!某人的总的情况 select * from attendance where 姓名 = 2 某人任一周的情况 select * from attendance where 姓名 = 2 and logTime between dt and DateAdd(d,7,dt); 大体就这样了!可能得根据你的数据库 来定是要一些 自带的 函数! 很容易 得出 一周 这种时间范围的! 先 自己试试看吧! 实在不在 我们再帮你写!
解决方案三:
CREATE TABLE attendance( id INT AUTO_INCREMENT PRIMARY KEY, 姓名 INT NOT NULL, 迟到 INT NOT NULL, 早退 INT NOT NULL, 旷课 INT NOT NULL, 病假 INT NOT NULL, 事假 INT NOT NULL, 公假 VARCHAR(2) NOT NULL, 销假情况 VARCHAR(50) NOT NULL logTime dateTime not null;); 某人的总的情况 select * from attendance where 姓名 = 2某人任一周的情况 select * from attendance where 姓名 = 2 and logTime between dt and DateAdd(d,7,dt);
解决方案四:
如果再原来的表中多个 考勤时间 字段 各个考勤字段代表什么意思呢?
解决方案五:
同意楼上的看法,后台数据结构不要设计得太复杂,只要有“考勤时间”字段就可以了;通过统计、分组、日期等函数就可以查询到需要的结果了,如果你觉得麻烦或者效率低,可以写个视图。
解决方案六:
引用怎么从表中查询到总的考勤情况(比如,能查第一周至当前周的总的考勤),又可以查询到任意一周的考勤情况。 个人认为数据库没必要设计的太复杂!如果现在又已设计好的!用酒OK 了! 只需要有个 考勤时间 字段!这些需求 都可以实现的!简单点说就是一个 统计 和按时间段查询问题! sql 基本语法!
解决方案七:
有个考勤详细表 :id name content Monday Tuesday ..... Sunday weekId周记录表weekId weekName weekstartDate weekEndDate(后两者根据需要暂定)这样的话,想获取当前周,要么你知道当前周德weekId,直接级联获取。要么计算当前周在 weekstartDate 和weekEndDate之间,便获取到weekid,然后在获取详细。获取某一周到某一周 ,你只需知道 weekId在 n与m之间的,或者 在n的startDate到m的endDate之间的所有记录。
解决方案八:
怎么从表中查询到总的考勤情况(比如,能查第一周至当前周的总的考勤),又可以查询到任意一周的考勤情况这是在查询条件中来考虑吧比如第一周到当前周的的总的考勤不需要考虑查询条件如果查询任一周,你需要把 createTime或者 logTime between a and ba 或者 b 为任一周的起始日期