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

+0

ず 'HighScores'( ' id'はint(11)NOT NULL AUTO_INCREMENT、 'deviceID'のVARCHAR(100)NOT NULL、 ' username'のVARCHAR(50)NULL NOT、 'score'のVARCHARを(存在する場合のCREATE TABLE 10)NOT NULL、 'game' int(2)NOT NULL、 ' spins' int(10)NOT NULL、 PRIMARY KEY( 'id') ) – Dave

答えて

1

私はそれがクエリを考え出すのは難しいあなたのテーブル構造を知らないので。

This articleあなたが望むものを正確に行います。

例クエリ:

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

魔法が行ごとにインクリメントされた変数である変数ROWNUM、です。

+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 = ? 
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 
関連する問題