2011-07-11 6 views
1

私は "MyTable"と呼ばれるMySQLテーブルを持っており、基本的にユーザー名とポイント(2つのカラム、名前とポイント)をリストしています。私は "joe1928のランクは何ですか?"というようなことを言いたいと思っています。もちろん、彼のポイントに基づいています。どのように私はMySQLでこれを行うことができますすべてのデータをダウンロードし、それを並べ替えると自分自身のランクを決定する必要はありません?MySQLテーブル内のランク

ポイントの数が最も多い人は、そのページから1

+0

ランクを計算する基準/計算式は何ですか。 –

+0

それはポイントに基づいています。最高点を持つ人は1 – StanLe

答えて

1

はあなたよりも高いスコアを持つ人々の数を取得して試してみてくださいユーザー:

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

トップユーザー。

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

あなたのクエリは以下のもののようになります。@Daveにより投稿されたリンクに基づいて:

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