发布于 1970-01-01 08:00
  • 5 个回答
    • 刚好我以前做过类似的一个数据库设计,给你一个思路
      这个明显是需要两张表来进行共同存储(就是把你的第一张表跟第二张结合)
      表A存储的为
      | userid | lastsign| consigncount |
      | 1 | 2015-08-28 | 2 |
      这个consigncount存储的是用户连续签到的天数
      表B跟你表二的结构一样
      这其实是两个需求,一个需求叫连续签到获得积分,另一个需求叫查看签到记录
      表A你可以理解为统计表
      每次用户签到的时候判断逻辑为

      1. 1用户签到 2查询表B判断是否为连续签到(查询昨天的签到记录)

          2.1 true 用户连续签到天数+1,并计算签到积分
          2.2 false
              2.2.1 判断是否补签(不太清楚你补签的需求是怎样,是前天签到的话就查询记录)
                 2.2.1.1 true 补签逻辑
                 2.2.1.2 false 将用户的连续签到天数重新置为1 3在表二中插入一条今天的签到的数据记录
        

      流程结束

      2022-12-01 13:09 回答
    • sign(user_id,date_month,sign_records)

      我也认同楼主采用第一种.
      因为查询的条件主要还是落在user_iddate_month上,
      然后拿到用户的签到记录sign_records,
      再用explode以逗号分割转成数组进行积分计算.

      建议date_month使用时间戳存储:
      strtotime('2015-08')得1438358400
      字段类型刚好可以选择int(10),同时建立索引,加速查询.

      因为签到记录sign_records都是整数,可以用intval()保证插入的值是整数.
      以逗号分隔存入字段并无不妥,省去了序列化或者JSON的编解码操作,同时还方便使用MySQL的FIND_IN_SET函数以sign_records字段为条件进行查询,这都是逗号分隔的好处:
      比如查询在8月1日签到的用户:

      SELECT `user_id` FROM `sign` 
      WHERE `date_month` = 1438358400 
      AND FIND_IN_SET('1', `sign_records`);
      
      2022-12-01 13:09 回答
    • 个人见解是:
      1.数据表的字段“datamonth”改为“dataday”按天来记录签到。
      2.具体的分值根据签到天数计算:

      a.比如:初始分值设为1,第二天签到的同时更新用户的签到分值,并且判断用户前一天是否签到。如果签到则第二天分值增加比前一天多1分。
      b.当增加的分值等于6时,表示用户连续签到了6天,则给当天的分值增加(1+49)[其中的"1"表示每天增加1,49是常数,为了凑要求的分值]分
      c.当增加的分值等于15时,表示用户连续签到15天,则给当天的分值增加(1+69)分。
      d.其他一次类推。

      我不是大神,只是说说我的看法。

      2022-12-01 13:09 回答
      1. 使用JSON存储
        MySQL的话建议用JSON, MySQL 5.7原生JSON格式支持.
        用某种符号进行分割建议尽量避免, 日期比较简单. 如果复杂的数据就很容易出错. 能有稳健的数据结构就用数据结构.

      2. 使用触发器
        可以使用触发器来处理积分什么的.

      2022-12-01 13:09 回答
    • 第一种,但是增加一个字段,就是连续签到次数,补签应该是出发比较少的行为吧

      2022-12-01 13:09 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有