我有一个非常简单的 MySQL 表,用于保存高分。它看起来像这样:
Id Name Score
到目前为止,一切都很好。问题是:我如何获得用户排名?例如,我有一个用户Name或Id想要获得他的排名,其中所有行都是按顺序降序排列的Score.
Name
Id
Score
一个例子
Id Name Score 1 Ida 100 2 Boo 58 3 Lala 88 4 Bash 102 5 Assem 99
在这种情况下,Assem的排名将是 3,因为他获得了第三高的分数。
Assem
查询应返回一行,其中(仅)包含所需的排名。
SELECT id, name, score, FIND_IN_SET( score, ( SELECT GROUP_CONCAT( score ORDER BY score DESC ) FROM scores ) ) AS rank FROM scores
给出了这个列表:
id name score rank 1 Ida 100 2 2 Boo 58 5 3 Lala 88 4 4 Bash 102 1 5 Assem 99 3
获得单人分数:
SELECT id, name, score, FIND_IN_SET( score, ( SELECT GROUP_CONCAT( score ORDER BY score DESC ) FROM scores ) ) AS rank FROM scores WHERE name = 'Assem'
给出这个结果:
id name score rank 5 Assem 99 3
您将进行一次扫描以获取分数列表,然后进行另一次扫描或尝试对它做一些有用的事情。列上的索引score将有助于大型表的性能。
score