连续签到数据表设计php 连续签到算法

PHP求连续签到天数设计表结构时 多加一个字段 来存放连续签到天数, 每次 签到时更新这个字段要简单的多
否则你需要 每个人 都循环判断前一天是否签到的方法来解决
参考代码
【连续签到数据表设计php 连续签到算法】1--循环法
declare @day int= 1, --
2 @userId int =1,--用户id
3 @count int = 0 ,--连续签到多少天
4 @isSinginToday int--今天是否签到
5
6 whileexists ( select * from#SignInLog
7where UserId= @UserId and DATEDIFF(day ,createtime,getdate() ) = @day)
8 begin
9set @count = @count1-- 【循环方法】
10set @day = @day1--
11 end
12
13 select @isSinginToday =COUNT(*)from#SignInLogwhere UserId= @UserIdand 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 (
selectdatediff( day, CreateTime, @now )aa ,--签到时间对比今天的差值
row_number() over (order by createtimedesc )bb--排序字段
from#SignInLog
where UserId= @userIdanddatediff( day , CreateTime , @now )0--条件排除今天的签到记录
) T where aa = bb
select @isSinginToday =COUNT(*)from#SignInLogwhere UserId= @UserIdand DATEDIFF(day ,createtime ,getdate() ) = 0--今天是否登录
select@isSinginToday , --当天是否签到
@count@isSinginToday-- 连续签到n天
php如何统计用户连续签到多少次查询表时加个日期变量字段连续签到数据表设计php,然后倒序过虑计算签到天数
如MYSQL连续签到数据表设计php:
select count(*) 连继签到天数 from (
select a.签到日期,(@i := DATE_ADD(@i,INTERVAL -1 day)) todayfrom 签到表 a inner join
(select @i := max(签到日期) from 签到表 where 签到日期=curdate() or 签到日期=DATE_ADD(curdate(),INTERVAL -1 day)) b
order by a.签到时间 desc
) c where today = 签到日期
怎么用php来获取时间 周次 节次来做签到功能?签到功能主要是需要获取上次签到时间连续签到数据表设计php,然后进行比对连续签到数据表设计php,如果比较之后在零点之后,且大于24小时,就认为连续签到失败 。
关键点:每次需要记录签到时间,这样以后无论是根据记录,还是相应算法都可以统计相关连续签到数据表设计php的签到记录 。
签到功能核心就是时间连续签到数据表设计php的比较,只要比对好时间,然后封装签到方法,就可以轻松记录签到情况 。
请问下那个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
php 想做个签到 , 但是怎么判断连续3天 连续7天 连续30天签到过啊 。。思路是有 但是MYSQL那边的语句 。数据表里存储两个字段,一个int存时间戳 , 一个int存签到计数 。每次签到发生时,php页面做判断,计算本次签到时间戳与系统记录的最后一次签到时间戳之差,超过3600*24,则将计数修改为零,否则 1 。
sql语句就不写了吧,就一个update的事情 。。。
关于连续签到数据表设计php和连续签到算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读