MySQL排名,无法让它正常工作

时间:2017-04-09 12:33:45

标签: php mysql database ranking rank

我知道这已经有所涉及,但它对我的情况没有帮助,而是在等级上存在差异。想知道是否有人能帮忙!

所以我有一个游戏,数据库表是: 用户,地图,昵称,user_game_scores

我正在开发一个排行榜,并且能够轻松获得按分数排序的信息。奇妙。

但我想对此进行排名,以便我可以提取特定用户分数,并且排名与所有分数相关。例如:

全球分数

user info - Score - (rank)1
user info - Score - (rank)2
user info - Score - (rank)3
etc.

而USER SCORES更可能是:

user info - Score - (rank)82
user info - Score - (rank)94
user info - Score - (rank)115
etc.

我认为实现是这样的:

 SELECT users.first_name, users.surname, player_nicknames.nickname, maps.map_name, user_game_scores.score,
FIND_IN_SET( score, ( SELECT GROUP_CONCAT( score ORDER BY score DESC ) FROM user_game_scores ) ) AS rank
FROM `user_game_scores`
INNER JOIN users ON user_game_scores.user_id = users.user_id
INNER JOIN maps ON user_game_scores.map_id = maps.map_id
INNER JOIN player_nicknames ON user_game_scores.user_id = player_nicknames.user_id
WHERE user_game_scores.deleted is null
AND users.deleted is null
AND player_nicknames.deleted is null
ORDER BY user_game_scores.score DESC

But it returns this: (click here) - names etc have been removed from the image as it may not be appropriate to display 正如您所看到的,Rank倾向于错过一两个数字(数字2和23)。我明白像排名24这样的东西会分组并继续(我更喜欢在那个例子中发生)但我不明白为什么一些排名缺失,并且真的不想发布处理这个功能。

对不起,这很长,但我认为id尽可能多地提供信息。提前谢谢!

1 个答案:

答案 0 :(得分:0)

这可能是因为SELECT GROUP_CONCAT子查询未过滤“已删除”(已删除为空)条目。 - Paul Spiegel 9小时前