2011-01-09 35 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