2011-01-09 121 views
0

我有一个数据库充满了我创建的游戏的用户分数。我试图添加一个功能来向用户显示他们当前的排名。mysql查找行的位置

我需要一个查询,将按照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) 
); 
+0

什么是你的表格结构? – diagonalbatman 2011-01-09 21:50:14

+0

CREATE TABLE IF NOT EXISTS'HighScores`( `id` int(11)NOT NULL auto_increment, `deviceID` varchar(100)NOT NULL, `username` varchar(50)NOT NULL, `score` varchar 10)NOT NULL, `int`(2)NOT NULL, `spins` int(10)NOT NULL, PRIMARY KEY(`id`) ) – Dave 2011-01-09 21:53:00

回答

1

,因为我不知道你的表结构,很难拿出一个查询。

This article确实如你所愿。

实施例的查询:

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

神奇的是在可变ROWNUM,这是递增的每一行的变量。

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 = ? 
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; 
0
SET @rank=0; 

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