【问题标题】:Top user of day, week, all time - best way to implement?一天,一周,所有时间的顶级用户 - 最佳实施方式?
【发布时间】:2013-01-13 18:00:30
【问题描述】:

假设我网站上的每个用户的分数随着他们使用该网站(如 Stackoverflow)而增加,并且我在每个用户的用户配置文件表中存储了一个字段 score

获得有史以来排名前 10 的用户很容易,只需按 score 列排序。

我想要“今天前 10 名”、“本周前 10 名”、“有史以来前 10 名”。

实现这一点的最佳方法是什么?我需要用时间戳存储每一个分数变化吗?

【问题讨论】:

  • "我需要用时间戳存储每一个分数变化吗?" -- 这就是 stackoverflow 似乎在做的事情。

标签: django database-design web-applications


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2017-05-17
    • 2012-05-22
    • 1970-01-01
    • 2013-02-12
    • 2012-04-01
    相关资源
    最近更新 更多