php mysql连续签到跨月_PHP求连续签到天数

展开全部

设计表结构时 多加一个字段 来存放连续签到32313133353236313431303231363533e78988e69d8331333363376530天数, 每次 签到时更新这个字段   要简单的多

否则你需要 每个人 都循环判断前一天是否签到的方法来解决

参考代码1  --循环法

declare @day int  = 1, --

2 @userId int =1,  --用户id

3 @count int = 0 ,  --连续签到多少天

4 @isSinginToday int  --今天是否签到

5

6 while  exists ( select * from  #SignInLog

7     where UserId  = @UserId and DATEDIFF(day ,createtime  ,getdate() ) = @day    )

8 begin

9     set @count = @count + 1      -- 【循环方法】

10     set @day = @day + 1  --

11 end

12

13 select @isSinginToday =COUNT(*)  from  #SignInLog    where UserId  = @UserId  and DATEDIFF(day ,createtime ,getdate() ) = 0  --今天是否登录

14

15

16 select  @isSinginToday , --当天是否签到

17 @count + @isSinginToday  -- 连续签到n天

如果数据库支持 row_number(), mysql  不支持此函数...

可以用declare @now datetime  = getdate() ,

@count int ,

@userid int = 1 ,

@isSinginToday int

select @count  = count(*) from (

select  datediff( day  , CreateTime  , @now )         aa ,  --签到时间对比今天的差值

row_number() over (order by createtime  desc )    bb    --排序字段

from  #SignInLog

where UserId  = @userId   and  datediff( day , CreateTime , @now )  > 0  --条件排除今天的签到记录

) T where aa = bb

select @isSinginToday =COUNT(*)  from  #SignInLog    where UserId  = @UserId  and DATEDIFF(day ,createtime ,getdate() ) = 0  --今天是否登录

select  @isSinginToday , --当天是否签到

@count + @isSinginToday  -- 连续签到n天

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值