4

好的,所以我有一张桌子,上面有以下内容

KEY   username   password   score  

上面的列没有任何特定的顺序。

我想向我的数据库发送一个用户名,并让它根据其分数向我发送该用户名的排名。例如,如果我有 10 个人在里面,而里面的第 3 个人得分最高。当我通过第三个人用户名时,我希望它发回 1。

这可能吗?

我一直在尝试这样的事情

$result = mysql_query("SELECT * FROM tablename where username='$username' ORDER BY score DESC");

但它似乎没有给我行号

4

2 回答 2

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

为了获得更好的性能,添加一个INDEXon 列Score

ALTER TABLE tableName ADD INDEX (Score)
于 2013-02-28T13:48:58.627 回答
2
SELECT 
    (SELECT COUNT(*)+1 FROM tablename WHERE score > t.score) as rank,
    * 
FROM
     tablename t
where 
     username='$username'

您的ORDER BY查询中的 没有用,因为您只返回一行。

于 2013-02-28T13:47:22.870 回答