2011-07-11 56 views
1

我有一個名爲「MyTable」的MySQL表,它基本上列出了用戶名和點(兩列,名稱和點)。我想說的是「什麼是joe1928的排名?」,這當然是基於他的觀點。我怎麼能在MySQL中做到這一點,而無需下載所有數據並對其進行排序並自己確定排名?MySQL表中的排名

的人以最高分人數將從該網頁的排名1.

+0

什麼是計算等級的標準/公式? –

+0

它是基於點。最高分的人排名1 – StanLe

回答

1

嘗試讓多少人有更高的分數比你用戶:

select count(*) from MyTable where score > (select score from MyTable where user = 'Joe'); 

這將返回0爲頂級用戶。

0

This page seems to describe and solve your problem.

注:

SET @rownum := 0; 
SELECT rank, correct FROM (
       SELECT @rownum := @rownum + 1 AS rank, correct, uid 
       FROM quiz_user ORDER BY correct DESC 
       ) as result WHERE uid=xxxxxxxx 
+0

哇這看起來很複雜。你能告訴我如何在我的表格中使用我的特定列名稱嗎? – StanLe

+0

我鏈接的頁面詳細描述了您的問題和解決方案。我建議試着通讀一下。 – Dave

0
SELECT @r AS Rank 
FROM MyTable u, (SELECT @r := 0) 
WHERE (@r := @r + 1) * (u.Username = 'joe1928') 
ORDER BY u.Score DESC 
LIMIT 1 
0
select * from [TABLENAME] where [USERNAME] = blah order by [POINTS] desc limit 1; 
0

根據張貼@戴夫查詢的鏈接將類似於下面的內容:

select Rank,name from 
     (select @rownum:[email protected]+1 AS 'Rank', p.name 
     from calls p, (select @rownum:=0) r 
     order by p.points desc) as rankResults 
where name = 'joe'; 
0

這是從另一個堆棧溢出頁面,似乎解決您的問題。

SELECT uo.*, 
    (
    SELECT COUNT(*) 
    FROM users ui 
    WHERE (ui.points, ui.id) >= (uo.points, uo.id) 
    ) AS rank 
    FROM users uo 
    WHERE id = @id