任务需求
要统计玩家的分数排行榜,但是同一个玩家只能在排行榜中出现一次,因此需要去重处理。
解决方案
目前的设计是有一个PlayLog
表,每一次用户游戏结束之后在PlayLog
表中增加一条记录,设计如下
type PlayLog struct {
Id int64
User *User `orm:"rel(fk)"`
StartTime time.Time
Duration int64 `orm:"null"`
Score int64
}
由于每个玩家可能玩多次游戏,因此可能会有多次记录,所以需要查重,搜索一下有没有解决方案,在Mysql必知必会
一书中第12章第13章所述,可以通过数据分组的方法来解决重复的问题
分组(group by)可以把根据条件把表内容的子集方便的汇总起来,例如:在上面的例子中有15条记录,分别是7个玩家的游戏日志记录
id | user_id | score |
---|---|---|
1 | 2 | 100 |
2 | 1 | 200 |
3 | 2 | 10 |
4 | 2 |