首页 新闻 会员 周边

SQL 连续签到

0
悬赏园豆:50 [待解决问题]

我有这样一个需要。

后台设置签到规则:

连续1天,奖励1元

连续2天,奖励2元

连续3天,奖励3元

.....

用户已连续签到天数,超出设置的最大天数时,则从头开始。

已知用户已连续签到176天,比如最大天数设置为175天。

能得出此时用户签到,应该取:连续签到2的奖励金额。

因为签到后连续签到是177天。超过最大设置的175。所以从头开始,即为第2天。

 

现在求教 这个算法怎么写。怎么计算出应该是第2天。用SQL写。

 

是不是需要用到递归呢?求助求助。

OriginalCobra的主页 OriginalCobra | 初学一级 | 园豆:37
提问于:2018-08-13 14:54
< >
分享
所有回答(6)
0

这样的需求呢,不应该等到最后才写。

好的做法是,当天写入数据中。

比如

2018-6-1, 员工张三,签到:, 连续天数:0

第二天,如果有签到,就是1,如果没有签到,那就还是0,

每天判断前一天是否签到,当天是否签到,就能得到当天应该写入的数字。

至于你说的175,在这个判断里面加一个条件就行了。

 

这样的话,每天只需要循环所有员工,计算得到这个员工的连续签到数,写入就行了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2018-08-13 15:02

是的,我目前就是每次签到,都会计算昨天是否签到。一次作为判断是否是连续签到,并且把连续签到的数,写入用户表中。

 

现在难住我的,当用户连续签到的天数,超出设置规则的天数时,我不知道怎么通过SQL计算得出,此时应该返回的奖励值

支持(0) 反对(0) OriginalCobra | 园豆:37 (初学一级) | 2018-08-13 15:05

@OriginalCobra: 超出规则天数的话,已经直接从1开始了,写入的就是1而不是176了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2018-08-13 15:34
0

你都能查出连续签到x天了, x/175求余不就行了?

找不到一个满意的昵称 | 园豆:243 (菜鸟二级) | 2018-08-13 15:07

我是查出连续签到175天。需要在规则中找出,175对应的设置是第几天。

支持(0) 反对(0) OriginalCobra | 园豆:37 (初学一级) | 2018-08-13 15:28

@OriginalCobra: 签到不是一个循环吗,7天一个循环你就用连续天数除以7求余,30天一个循环你就除以30求余?

@找不到一个满意的昵称: 不是固定的。是可以配置天数的。

支持(0) 反对(0) OriginalCobra | 园豆:37 (初学一级) | 2018-08-13 16:28

@找不到一个满意的昵称: 可以配置 第一天、第二天....

支持(0) 反对(0) OriginalCobra | 园豆:37 (初学一级) | 2018-08-13 16:28
0
ycyzharry | 园豆:25653 (高人七级) | 2018-08-13 15:09
0

 我在用户表上加了个字段,用于标注目前已经连续签到的天数。

每次签到时,判断这个是否在配置的规则内,如果超出则重置为1。

这样就能保证,连续签到的天数都能在规则中匹配到。

 还有个字段记录总共连续签到天数,当然如果断签,也重置为1。否则就+1

 

 

 

 

 

OriginalCobra | 园豆:37 (初学一级) | 2018-08-13 17:08
0

with OA as(

  select 奖励天数=(签到天数%设置的最大天数)

  from 签到表

  join 配置表 on 关联条件

)

select 奖励 from OA

join 奖励规则表 on oA.天数=奖励规则表.天数

 

大概就这个意思吧

浅草青晨 | 园豆:904 (小虾三级) | 2018-08-14 14:41
0

判断当签到天数大于175小于175*2时候减去175

判断当签到天数大于175*2小于175*3时候减去175*2

判断当签到天数大于175*3小于175*4时候减去175*3

.....

这是我作为刚入门的菜鸟的想法

泥巴吖 | 园豆:170 (初学一级) | 2018-08-16 14:27

 

规则是这样的。

 

此时如果用户已连续签到175天。

那么第176天应该是规则中的第几个奖励金额。

 

PS:当前到天数,超出设置规则后,重置1,即从头开始。

支持(0) 反对(0) OriginalCobra | 园豆:37 (初学一级) | 2018-08-16 18:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册