连续签到数据表设计php 连续签到sql

php如何统计用户连续签到多少次

查询表时加个日期变量字段,然后倒序过虑计算签到天数

在张家口等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都做网站 网站设计制作按需定制制作,公司网站建设,企业网站建设,品牌网站建设,营销型网站建设,成都外贸网站建设,张家口网站建设费用合理。

如MYSQL:

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 = 签到日期

请问下那个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求连续签到天数

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

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

参考代码

1  --循环法

declare @day int  = 1, --

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

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

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

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天


分享名称:连续签到数据表设计php 连续签到sql
文章路径:http://csdahua.cn/article/ddsddji.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流