
设计表结构时 多加一个字段 来存放连续签到天数, 每次 签到时更新这个字段 要简单的多
否则你需要 每个人 都循环判断前一天是否签到的方法来解决
参考代码
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天
1、首先,在后台数据库中建立一个表,用来存储签到打卡的位置信息,表中包括签到者的ID、签到时间、签到地点等字段。2、在签到时,让签到者使用手机定位获取自己的位置信息,将获取的位置信息(经纬度)发送到后台服务器。
3、后台服务器接收到签到者的位置信息后,将其转换为具体的地址,并将签到者的ID、签到时间、签到地点等信息写入到后台数据库中。
4、最后,将签到信息返回给签到者,以确认签到成功。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)