巴扎黑2017-04-11 10:36:57
如果每次签到都存一条记录,那么这张表一定非常巨大。
看看现在各方推出的签到和连续签到功能,基本上都是以月为单位,也有部分是在活动周期为单位,这样有一个好处——只需要用一个字段保存整月的签到情况就好,不需要拆成30条记录——因为不需要按签到的日期去查有哪些人,所以不需要精确记录每一天的签到用于查询。因为只需要在打开这个人的页面的时候显示他哪些天签到了,从一个字段里一次性读出来所有签到数据,前端显示即可。
为了便于查询签到天数和连续签到天数,可以分别用一个字段来保存。签到的时候直接根据当前签到记录很容易算出来这两个数据。有了这两个数据字段,要查询符合条件的用户也就是一个SQL的事情。
道理差不多就是这些了,自己想想试试吧。
PHP中文网2017-04-11 10:36:57
刚好整理了一份签到数据统计的项目SQL语句。
比如:
1.统计每天的每小时用户签到情况?
2.统计每天的用户签到数据和每天的增量数据?
3.统计签到天数相同的用户数量?
4.统计每个用户的连续签到时间?
5.数据表如何设计?
文章地址:Mysql 常用SQL语句集锦
在文章的后半部分!
PHP中文网2017-04-11 10:36:57
首先从设计数据库开始,
签到表应该有用户id,签到类型,签到积分,连续签到数,签到时间等字段。给签到时间字段加索引。
用户点击签到后,你可以从数据库中按照时间降序,获取该用户最新的一条签到数据,首先这一条数据判断当天他是否已经签过到了,如果判断他当天已经签到了,那么不允许他再次签到,如果没有签过到,那么在判断是否是昨天的签到数据,如果是昨天的签到数据的话,我在插入新的数据时,连续签到数字段的值为昨天连续签到数+1,否则连续签到数为1插入到数据库中。
对于显示连续签到数的时候呢,我们同样获取用户的最新一天签到记录,如果这天数据不是今天或者昨天的签到数据的话,我们现实连续签到0天,如果是今天或则昨天的签到数据的话就显示连续签到数字段的值。
最后我没有做过签到功能,这些都是我自己的想法。如果有误还望大神们指点指点我,本菜鸟一名。大神求带。哈哈哈
PHP中文网2017-04-11 10:36:57
主要看你项目对签到和连续签到的要求
针对这个签到和连续签到的问题,我觉得从两个方面去处理
1、把每日签到,记录到数据库,考虑到量大的问题,可以分表兼容,因为这个都是简单的业务逻辑,不会链表操作,根据uid来分表就可以,这个可以实现签到和连续签到的查询
2、使用redis计数实现连续签到;当用户签到的时间和当月天数时间一致的话,就是连续签到。在每个月1好,就可以重置数据