这样的需求呢,不应该等到最后才写。
好的做法是,当天写入数据中。
比如
2018-6-1, 员工张三,签到:, 连续天数:0
第二天,如果有签到,就是1,如果没有签到,那就还是0,
每天判断前一天是否签到,当天是否签到,就能得到当天应该写入的数字。
至于你说的175,在这个判断里面加一个条件就行了。
这样的话,每天只需要循环所有员工,计算得到这个员工的连续签到数,写入就行了。
是的,我目前就是每次签到,都会计算昨天是否签到。一次作为判断是否是连续签到,并且把连续签到的数,写入用户表中。
现在难住我的,当用户连续签到的天数,超出设置规则的天数时,我不知道怎么通过SQL计算得出,此时应该返回的奖励值
@OriginalCobra: 超出规则天数的话,已经直接从1开始了,写入的就是1而不是176了。
你都能查出连续签到x天了, x/175求余不就行了?
我是查出连续签到175天。需要在规则中找出,175对应的设置是第几天。
@OriginalCobra: 签到不是一个循环吗,7天一个循环你就用连续天数除以7求余,30天一个循环你就除以30求余?
@找不到一个满意的昵称: 不是固定的。是可以配置天数的。
@找不到一个满意的昵称: 可以配置 第一天、第二天....
我在用户表上加了个字段,用于标注目前已经连续签到的天数。
每次签到时,判断这个是否在配置的规则内,如果超出则重置为1。
这样就能保证,连续签到的天数都能在规则中匹配到。
还有个字段记录总共连续签到天数,当然如果断签,也重置为1。否则就+1
with OA as(
select 奖励天数=(签到天数%设置的最大天数)
from 签到表
join 配置表 on 关联条件
)
select 奖励 from OA
join 奖励规则表 on oA.天数=奖励规则表.天数
大概就这个意思吧
判断当签到天数大于175小于175*2时候减去175
判断当签到天数大于175*2小于175*3时候减去175*2
判断当签到天数大于175*3小于175*4时候减去175*3
.....
这是我作为刚入门的菜鸟的想法
规则是这样的。
此时如果用户已连续签到175天。
那么第176天应该是规则中的第几个奖励金额。
PS:当前到天数,超出设置规则后,重置1,即从头开始。