一、簽到模塊效果圖
產品設計:
1、用戶當日登錄后,首先能夠看到:當前“累計簽到”的總次數及該次數在所有用戶中的排名情況;當月已簽到日期(藍色)
2、簽到功能,簽到后提示連續簽到的天數,並提示已簽到
二、簽到模塊數據庫設計
一張簽到流水表,所有用戶的每次簽到都在該表中生成記錄。
三、業務sql
1、用戶登錄后看到用戶“累計簽到”的總次數及該次數在所有用戶中的排名情況;當月已簽到日期(藍色)
1.0判斷用戶當日是否已簽到
select count(1)
from MIC_TD_EXERCISE_SIGNIN s where to_char(s.SIGN_TIME,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd') and s.user_id = 4
1.1獲取用戶累計簽到的次數及排名
select userid,dense_rank() over(order by cou desc) from (select count(1) cou,s.USER_ID userid from MIC_TD_EXERCISE_SIGNIN s group by s.USER_ID) tmp
where tmp.userid = ?
注:oracle排序:
不連續排序:rank()over(order by column)
連續排序:dense_rank()over(order by column)
1.2獲取當月已簽到的所有日期(僅需包含日即可)
select SIGN_TIME
from MIC_TD_EXERCISE_SIGNIN t
where to_char(t.sign_time,'MM')=?
and to_char(t.sign_time,'yyyy')=? and user_id=?
2、用戶簽到
獲取前一天的簽到記錄,如果沒有,說明沒有連續簽到,此時sustain_day設置為1;如果有,獲取前一天記錄的sustain_day記錄加一設置為新記錄的sustain_day字段值。
select *
from MIC_TD_EXERCISE_SIGNIN s where to_char(s.SIGN_TIME,'yyyy-MM-dd') = to_char(sysdate-1,'yyyy-MM-dd') and s.USER_ID = ?;
插入數據
insert into MIC_TD_EXERCISE_SIGNIN values(?,?,sysdate,?)