趋势排行榜的数据库结构

问题描述 投票:0回答:1

我正在开发一个类似游戏的应用程序,带有排行榜,并希望排行榜具有以下功能:

  • 显示前 100 名
  • 显示每月、每周、每日前 100 名
  • 在每个用户旁边显示趋势(如果用户在排行榜上上升,则显示绿色向上箭头,如果下降,则显示红色向下箭头)

目前我有两张桌子:

用户:

除了所有用户特定数据之外,该表还有一个积分列

查询获取历史 TOP 100:

SELECT uuid, points FROM user ORDER BY points DESC LIMIT 100

用户分数:

列:id、uuid、user_uuid、game_uuid、score_change、时间戳

这里有一些伪示例行:

|id|    uuid   |    user_uuid   |   game_uuid    | score_change|ts|
|--|-----------|----------------|----------------|-------------|--|
|1 | some_uuid | uuid_of_user_a | uuid_of_game_a |      2      |22|
|2 | some_uuid | uuid_of_user_a | uuid_of_game_b |      1      |24|
|3 | some_uuid | uuid_of_user_a | uuid_of_game_c |      3      |28|

每场比赛结束后,用户的分数变化都会写入此处。

查询以获取例如每周排行榜:

SELECT SUM(score_change) AS total, user_uuid 
FROM user_scores WHERE timestamp > week_begin & timestamp < week_end
GROUP BY user_uuid ORDER BY total DESC LIMIT 100

当然,我也可以从 user_scores 表中查询历史前 100 名,但我认为这可能更有效,因为我不必获取整个 user_scores 表。

到目前为止一切顺利。但如何落实队伍的趋势呢?

sql mysql database data-structures game-development
1个回答
0
投票

您应该为每个分数变化添加时间戳列。 即时计算分数。

© www.soinside.com 2019 - 2024. All rights reserved.