求助:您已连续签到**天,思路

  • o
    opensesame
    公司公众号里的一个小功能,之前实现的连续签到一个月或者100天,是每天签到都有一条记录,然后当天向前-100的签到记录日期正好是DateDiff后100的日期,就得到结果了。

    那么要累计总共连续签到多少天,有什么思路吗


    签到记录就是每个用户签到一次,数据库插入一条UID,以及当天日期。
  • z
    zjy1993
    不一定要这么搞嘛,可以做一个签到记录表,一个用户id,一个签到日期 ,另一个是连续天数,
    第一次 insert 日期 和 1,以后就是update了,每次update的时候比较日期 是否 当前日期 -1,如果是连续天数 + 1 else 连接天数 = 1 ,这样速度快代价小。

    类似 :
    update LoginTab set logindate = today , logcount = (case when diff(today, logindate) = 1 then logcount + 1 else 1 end) where userid = xxx
  • y
    ynr
    增加一个用户签到计数表,两个字段,uid,count
    每天用户签到,插入签到记录的同时查找前一天是否有签到记录,有则update签到计数表count加1,没有update签到计数表count为1
    任何时候读出count值就是当前连续签到天数
  • o
    opensesame
    对,这样的话,以前的就没法统计了,对于之前的数据有什么思路么,这套东西用了好几年了
  • z
    zjy1993
    个人的看法:
    1、在数据库上做做文章,比如通过在原来的 登录表 上设置触发器(总不至于还用单机数据库吧?),按新表的格式式把数据插入进去。
    2、老系统已经的功能不要动,这个也是我建议在数据库上想法的原因,新功能使用新表来完成。
    3、如果老数据需要处理,写一个存储过程把数据导到新表上也是很简单的,如果数据库支持游标,用一个降序的sql把用户数据查出来到游标之中,使用一个简单的遍历到日期不连续即可退出。
  • b
    backfires
    可以考虑使用bitmap
  • o
    opensesame
    第三条可行,感谢!
    sql我不精通,导入新表的时候本地处理一下,估计需要很长时间,但是应该可以解决问题