1

我正在制作一个系统,用户可以通过网站上的某些操作来获得成就。

数据库分为三个,用户、成就和表链接两者。

对于排名来说,重要的是连接用户和成就的表格。结构如下(称为 user_achievements):

| id | user_id | achievement_id | created_at | updated_at |

排名靠前的人应该是成就最多的人,并且谁首先赢得了那个人。

组装的查询:

SELECT user_id, 
       COUNT(achievement_id) AS 'total', 
       created_at 
FROM `user_achievements` 
GROUP BY user_id ORDER BY total DESC, created_at ASC LIMIT 10

此查询有效,但问题是谁拥有最多成就(“总数”)的“分组依据”,它不支持最后一个 created_at 用户。来第一个 created_at 那个用户,这不适合谁是第一个获得这么多成就的人。

我的系统使用 Ruby on Rails,ActiveRecord 中是否有此查询的解决方案,将有很大帮助。

非常感谢!对不起我的英语不好...

4

2 回答 2

3
SELECT user_id, 
       COUNT(achievement_id) AS 'total', 
       MAX(created_at) as 'lastTS' 
FROM `user_achievements` 
GROUP BY user_id 
ORDER BY total DESC, lastTS ASC LIMIT 10
于 2012-08-25T03:07:09.750 回答
1

我知道你已经选择了你的答案,但如果你仍然想要 ActiveRecord 中的解决方案......

class User < ActiveRecord::Base
    scope :ranked, order('achievements.count DESC, achievements.created_at ASC').limit(10)
end

然后你只需要打电话Users.ranked@users.ranked得到你需要的回报。

于 2012-08-26T02:38:13.073 回答