最近考勤系統老是出錯,不知道公司考勤是怎麼做的。因為自己對mysql用的也不多,這裡根據自己的想法參考了別人的部落格,加上自己的驗證。學到了一些收穫,在這裡記下來。
考勤系統最關心的是簽到與簽退,這裡簽到是第一次打卡的時間,簽退是最後一次打卡的時間。(這麼做記錄會不全面,不推薦,只做驗證用)
這裡我們不關心中間打了多少次卡,只記錄第一次和最後一次的時間。所以簽到只能是「insert ignore into」,簽退是「insert into … on duplicate update time=now()」。這裡建立表的時候不能指定 primary key,否則主鍵衝突會發生,從而覆蓋簽到的值。我們想到的是依靠「uid,批次」作為唯一索引,如果同一天的同一批次有衝突,則更新。
下面是建表操作的一些語句,day指定的是日期、batch指定上下班、time指定具體時間,因為只做驗證,語句比較簡陋:
建表語句
create
table schedule (
dayint
notnull
, batch int
notnull
,time
text
notnull);
建立唯一索引
create
unique
index u_idx on schedule(
day, batch)
;每打一次卡都會執行下面兩條語句
insert
ignore
into schedule (
day, batch,
time
)values
(20180911,0
,now()
);insert
into schedule (
day, batch,
time
)values
(20180911,1
,"1")on
duplicate
keyupdate
time
=now()
;
驗證結果正確,這裡就不貼圖了。
方法是每次打卡都被記錄下來。這樣在記錄上非常完備,對使用者來說非常友好。在計算上只關心當天第一次和最後一次,這也非常容易實現。
insert
into schedule (
day,
time
)values
(20180911
,"1");
最早時間
select
*from schedule order
bytime
asclimit1;
最晚時間
select
*from schedule order
bytime
desc
limit1;
這裡time可以用時間戳,方便排序
考勤錄入 順藤摸瓜式的思考
背景就不介紹了!紙質考勤 excel彙總 資料庫 資料庫,這兒是我做的事 人員流動性大,且基本工資不一樣等等原因,到我那就煩了。後來就想能不能搞個網頁讓他們自己錄入,後台直接連線資料庫呢?1.網頁?那就html,html能和資料庫互動嗎?問了之前同事同學,說不行!2.什麼網頁能和資料庫互動呢?有時你...
關於大資料的思考
關於大資料的思考 大資料思維與決策 讀後感 21世紀的競爭是資料的競爭,誰掌握資料,誰就掌握未來。馬雲 不難理解大資料在我們生活的重要性。隨著科技發展,網路無處不在,儲存資訊的本質是數字0和1 至少目前的計算機是如此 因而可以說資料無處不在。在 大資料思維與決策 中,作者採用大量例子說明近20年來大...
mysql考勤資料庫設計 mysql 資料庫設計
正規化 大概有8種正規化,遵循前三個一般資料庫就沒有問題 1 列不能再拆分 比如一列中有姓名,又有性別,就是沒有遵循這一條正規化 order id product id price quantity product name 111 11 123 good pen order id 和 produc...