一天,一周,所有时间的最佳用户 - 最好的实施方式?

时间:2013-01-30 01:31:06

标签: django database-design web-applications

假设我网站上的每个用户的分数在使用网站时都会增加(例如Stackoverflow),并且我在每个用户的用户个人资料表中都有一个字段score

获取前10位用户非常简单,只需按score列排序即可。

我想拥有“今天的前10名”,“本周排名前10”,“有史以来的前10名”。

实施此方法的最佳方法是什么?我是否需要使用时间戳存储每个分数变化?

1 个答案:

答案 0 :(得分:4)

您必须有一个存储增量的表并使用时间戳。即。

CREATE TABLE ScoreIncreases (
             PrimaryKey UNIQUEIDENTIFIER, 
             UserId UNIQUEIDENTIFIER, 
             ScoreIncrease INT,
             CreatedDate DATETIME)

您的查询将类似

SELECT TOP 1 u.PrimaryKey, SUM(ScoreIncrease)
FROM Users u
INNER JOIN ScoreIncreases si ON si.Userid=u.PrimaryKey
WHERE DATEDIFF(day,si.CreatedDate,GETDATE()) = 0
GROUP BY u.PrimaryKey
ORDER BY SUM(ScoreIncrease) DESC