排行榜位置SQL

时间:2015-04-04 19:06:15

标签: mysql leaderboard

他在那里,

我发现了很多像这样的问题,但我似乎无法解决这个问题。所以我会问它并希望有人可以帮助我解决这个具体问题(或者如果它是重复的话,请指导我这个问题)。

我的数据库中有以下三个表:

tbl_achievements

id | points

tbl_achievements_finished

id | user_id | achievement_id

tbl_users

id 

我想做的是选择特定用户或用户列表并查看职位/职级。这个想法是用户完成的所有成就,产生积分。完美的结果将是:

rank | user_id | achievement_points
1    | 6       | 65
2    | 3       | 45
3    | 2       | 15

我似乎无法绕过它。我希望有人可以帮助我(一个想法)查询。

非常感谢!如果有任何不清楚的地方,请告诉我。 :)

1 个答案:

答案 0 :(得分:0)

这样的事情应该这样做:

SELECT af.user_id, SUM(points) as 'achievement_points' 
FROM tbl_users as u
LEFT JOIN tbl_achievements_finished AS af ON u.id = af.user_id
LEFT JOIN tbl_achievements AS a ON a.id = af.achievement_id
GROUP BY u.id
ORDER BY SUM(points) DESC

这是上述查询的示例输出:

| user_id | achievement_points |
|---------|--------------------|
|       3 |                 40 |
|       1 |                 25 |
|       2 |                 15 |

请在此处查看:http://sqlfiddle.com/#!9/69775/9/0

由于订购原因,我没有设法保持排名,但在处理查询时,您始终可以使用排名。