php – 在给定用户名时,从无序的MySql数据库中获取基于分数的排名教程
好的,所以我有一张表有以下内容
KEY username password score
以上列没有任何特定顺序.
我想向我的数据库发送一个用户名,让它根据其得分将该用户名的等级发回给我.例如,如果我在那里有10个人,那么第3个人的得分最高.当我通过第三人的用户名时,我希望它发回1.
这可能吗?
我一直在尝试这样的事情
$result = mysql_query("SELECT * FROM tablename where username='$username' ORDER BY score DESC");
但它似乎没有给我行号
解决方法:
这将处理具有相同分数的排名.
SELECT d.*, c.ranks
FROM
(
SELECT Score, @rank:=@rank+1 Ranks
FROM
(
SELECT DISTINCT Score
FROM tableName a
ORDER BY score DESC
) t, (SELECT @rank:= 0) r
) c
INNER JOIN tableName d
ON c.score = d.score
// WHERE d.username = 'Helen'
SQLFiddle Demo (Ranking with duplicates)
SQLFiddle Demo (with filtering)
例如
KEY username password score Ranks
1 Anna 123 5 3
2 Bobby 345 6 2
3 Helen 678 6 2
4 Jon 567 2 4
5 Arthur ddd 8 1
为了获得更好的性能,请在列分数上添加INDEX,
ALTER TABLE tableName ADD INDEX (Score)