mysql查找行的位置

时间:2011-01-09 21:46:48

标签: mysql database

我有一个数据库,其中包含我创建的游戏的用户分数。我正在尝试添加一项功能,向用户显示他们当前的排名。

我需要一个查询,它将按分数DESC对行进行排序,然后找到用户分数并按用户名获得他/她的排名。

我知道这是一个非常简单的查询,但我的想法现在还不能正常工作。

CREATE TABLE HighScores(
   id       int(11)      NOT NULL auto_increment
  ,deviceID varchar(100) NOT NULL
  ,username varchar(50)  NOT NULL
  ,score    varchar(10)  NOT NULL
  ,game     int(2)       NOT NULL
  ,spins    int(10)      NOT NULL
  ,PRIMARY KEY (id)
 );

4 个答案:

答案 0 :(得分:1)

假设这样的表结构:

create table users(
   user_id
  ,score    int
  ,primary key(user_id)
);

您可以通过计算得分较低的用户数来计算用户的排名。

select user_id
      ,score
      ,(select count(*) + 1 from users x where u.score < x.score) as rank
  from users u
 where u.user_id = ?

答案 1 :(得分:1)

由于我不知道您的表结构,因此很难提出查询。

This article完全符合您的要求。

示例查询:

select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc limit 10;

魔法在变量rownum中,这是一个为每一行增加的变量。

答案 2 :(得分:0)

SET @rank:= 0;
SELECT rank, score FROM (
                    SELECT @rank:= @rank + 1 AS rank, id, score
                    FROM scores ORDER BY score DESC
                    ) as result WHERE id=xxx;

答案 3 :(得分:0)

SET @rank=0;

SELECT username, rank
FROM (
  SELECT username, @rank:=@rank+1 AS rank
  FROM HighScores 
  ORDER BY score DESC
) AS t
WHERE username = :username