他在那里,
我发现了很多像这样的问题,但我似乎无法解决。所以我会问它,并希望有人能帮助我解决这个特定的问题(或者,如果它是重复的,请引导我回答这个问题)。
我的数据库中有以下三个表:
tbl_成就
id | points
tbl_successments_finished
id | user_id | achievement_id
tbl_users
id
我想做的是选择一个特定的用户或用户列表,并查看职位/排名。其理念是,用户完成的所有成就,都会产生积分。完美的结果是:
rank | user_id | achievement_points
1 | 6 | 65
2 | 3 | 45
3 | 2 | 15
我似乎无法理解。我希望有人能帮我解决这个问题。
非常感谢!如果有什么不清楚的地方,请告诉我。:)
应该这样做:
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
由于排序的原因,我没能保持排名,但在处理查询时,您可以随时使用它。