好的,我有一张包含以下内容的表
KEY username password score
上述列没有任何特定顺序。
我想向我的数据库发送一个用户名,并让它根据其得分将该用户名的等级发回给我。例如,如果我在那里有10个人,那么第3个人的得分最高。当我通过第三人的用户名时,我希望它发送回来。
这可能吗?
我一直在尝试这样的事情
$result = mysql_query("SELECT * FROM tablename where username='$username' ORDER BY score DESC");
但它似乎没有给我行号
答案 0 :(得分:3)
这将处理具有相同分数的排名。
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'
例如
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
上添加Score
,
ALTER TABLE tableName ADD INDEX (Score)
答案 1 :(得分:2)
SELECT
(SELECT COUNT(*)+1 FROM tablename WHERE score > t.score) as rank,
*
FROM
tablename t
where
username='$username'
您的查询中的ORDER BY
无用,因为您只返回一行。