假设想记录用户一个月内的积分历史,MySQL建表该怎么建呢
我觉得我就需要记录下用户30天内的积分变化..
但是建表该怎么去建,来记录这个变化
上面是原题
非常,非常感谢各位的答案.
我重新梳理下我的需求,这是一个游戏胜负增加积分的系统,无负分机制(负方得0分)
然后需要在首页展示总/月/周 ,积分获得者最高的前10名
我一开始提这个问题,是因为我拿不准是否要建一个详细的积分变化表,因为后面的操作让我觉得略微有点繁琐
就如各位所说,首先假设我建一张表叫"积分变化明细表"
流水号 / 用户id / 积分变化/理由 / 时间
这样做的话,我要统计出总/月/周 前10,就需要每天去执行一次更新操作:
如果按照这种方式去做,我是这样想的:
1,遍历该表,将本月(周)内登录有积分变动的用户id拿出来,组成一个列表
2,开始以上一步的用户列表为基础开始循环,在"积分变化明细表"内,用今天的积分减去本月初(和周一)的积分,得到该用户在此时间段内的积分增加值,存储到一个临时表内,如:
用户id / 周增加 / 月增加
3,将上一步生成的临时表,按周增加字段排序,取前10,再按月增加排序,取前10.
得到我想要的结果.
因为我对MySQL的了解仅仅限于增删改查的水平,觉得上面这种方式有点小繁琐
所以想提问了解一下是否有更加方便的方式来实现这个需求
回复内容:
如题,比如说我需要一个用户积分总榜,月榜,周榜
我觉得我就需要记录下用户30天内的积分变化..
但是建表该怎么去建,来记录这个变化
上面是原题
非常,非常感谢各位的答案.
我重新梳理下我的需求,这是一个游戏胜负增加积分的系统,无负分机制(负方得0分)
然后需要在首页展示总/月/周 ,积分获得者最高的前10名
我一开始提这个问题,是因为我拿不准是否要建一个详细的积分变化表,因为后面的操作让我觉得略微有点繁琐
就如各位所说,首先假设我建一张表叫"积分变化明细表"
流水号 / 用户id / 积分变化/理由 / 时间
这样做的话,我要统计出总/月/周 前10,就需要每天去执行一次更新操作:
如果按照这种方式去做,我是这样想的:
1,遍历该表,将本月(周)内登录有积分变动的用户id拿出来,组成一个列表
2,开始以上一步的用户列表为基础开始循环,在"积分变化明细表"内,用今天的积分减去本月初(和周一)的积分,得到该用户在此时间段内的积分增加值,存储到一个临时表内,如:
用户id / 周增加 / 月增加
3,将上一步生成的临时表,按周增加字段排序,取前10,再按月增加排序,取前10.
得到我想要的结果.
因为我对MySQL的了解仅仅限于增删改查的水平,觉得上面这种方式有点小繁琐
所以想提问了解一下是否有更加方便的方式来实现这个需求
这个需求需要多张表来实现。
简单梳理一下需求:
1.系统有多个用户。不知道你的行业,用户以中等规模看(50-500万,通常在连锁、零售业会有,如果是互联网行业可能更多;也可能是游戏等)
2.每一用户根据其行为获得积分(可能是注册、签到、购物、充值、推荐。。。等)
3.积分可以在某些场景下消费(减少积分)
4.用户需要查看其即时的当前积分余额以及积分变化记录(类似银行账户)
5.平台需要有积分榜(总积分榜、月积分榜、周积分榜),可能是余额榜,也可能是积分获得榜。
那么,通常需要这几张表:
1.积分异动明细表。记录积分的变化情况(增、减)、发生时间、来源、来源描述、用户等。
2.积分统计表。以月、周为单位的积分统计。需要记录周期、用户、积分增加、积分消费、积分余额。看业务需要也许还要增加上期余额。这个表不是一张,推荐周是周统计表,月是月统计表。周、月统计均通过批次作业每周期后执行。如果统计过后,异动明细有调整(如,某渠道的积分没有及时获得、或是积分记录出错需要更改),则发生日期后的周、月统计可能要重新计算。当然,也可以调整在当期(这个参考财务概念)
最后,列出来表结构吧:
1.积分异动明细表(用户号、业务序号流水、发生时间、来源(各业务)、来源描述(各业务详细说明,如单号)、变化方向(增、减)、积分、备注)
2.周积分统计表(用户号、周序号(可以是4位年+2位周)、上期余额、本期增加积分、本期消费积分、本期积分余额)
3.月积分统计表(用户号、月序号(4位年+2位月)、上期余额、本期增加积分、本期消费积分、本期积分余额)
以上,请参考。
时间 用户id 积分变化
用户ID,原积分,积分类型(如干了什么),积分变化(+n或-n),现积分,发生时间