
正文
连续签到数据表设计php 连续签到算法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
PHP求连续签到天数
设计表结构时 多加一个字段 来存放连续签到天数, 每次 签到时更新这个字段 要简单的多
否则你需要 每个人 都循环判断前一天是否签到的方法来解决
参考代码
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天
相关问答
Q1: php如何统计用户连续签到多少次
查询表时加个日期变量字段连续签到数据表设计php,然后倒序过虑计算签到天数
如MYSQL连续签到数据表设计php:
select count(*) 连继签到天数 from (
select a.签到日期,(@i := DATE_ADD(@i,INTERVAL -1 day)) today from 签到表 a inner join
(select @i := max(签到日期) from 签到表 where 签到日期=curdate() or 签到日期=DATE_ADD(curdate(),INTERVAL -1 day)) b
order by a.签到时间 desc
) c where today = 签到日期
Q2: 怎么用php来获取时间 周次 节次来做签到功能?
签到功能主要是需要获取上次签到时间连续签到数据表设计php,然后进行比对连续签到数据表设计php,如果比较之后在零点之后,且大于24小时,就认为连续签到失败。
关键点:每次需要记录签到时间,这样以后无论是根据记录,还是相应算法都可以统计相关连续签到数据表设计php的签到记录。
签到功能核心就是时间连续签到数据表设计php的比较,只要比对好时间,然后封装签到方法,就可以轻松记录签到情况。
Q3: 请问下那个PHP每日签到时怎么实现的!
以淘宝网领取淘金币的签到系统为例:
目标:
第一天签到增加5个积分;第二天连续签到则增加8个积分;第三天连续签到,增加11个积分,第四天连续签到,增加15个积分;第五天连续签到,增加19个积分;第六天连续签到,增加24个积分;第七天连续签到,增加29个积分;第八天以后的连续签到,都增加29个积分。连续签到断开,则积分从第一天开始计算。
思路:
这个比较简单,思路是这样的:
在用户表里添加一个连续登录的字段,如果每天连续登录自增1,如果超过24小时的话就直接归0.
再增加一个最后登录的时间,格式是时间戳的。
首先判断最后登录的时间和现在的时间的时间差值是多少,函数如下:
?php
function checkTime() {
if (time() - 最后登录时间 24*60*60 ) { // 判断时间是否大于24小时
// 让字段归0
}
}
?
这个样子就可以了。
至于加分就简单了。
如果字段值为:
1就加5,
2就加8,
3就加11,
4就加15,
5就加19,
6就加24,
大于7就加29
Q4: php 想做个签到,但是怎么判断连续3天 连续7天 连续30天签到过啊。。思路是有 但是MYSQL那边的语句。
数据表里存储两个字段,一个int存时间戳,一个int存签到计数。每次签到发生时,php页面做判断,计算本次签到时间戳与系统记录的最后一次签到时间戳之差,超过3600*24,则将计数修改为零,否则+1。
sql语句就不写了吧,就一个update的事情。。。
关于连续签到数据表设计php和连续签到算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







