4

さて、次のようなテーブルがあります

KEY   username   password   score  

上記の列は特定の順序ではありません。

データベースにユーザー名を送信し、スコアに基づいてそのユーザー名がどのランクにあるかを返信してもらいたいです。たとえば、そこに 10 人がいて、3 番目の人が最高のスコアを持っていたとします。第三者のユーザー名を渡すときに、1 を送り返したい。

これは可能ですか?

私はこのようなことを試してきました

$result = mysql_query("SELECT * FROM tablename where username='$username' ORDER BY score DESC");

しかし、それは私に行番号を与えていないようです

4

2 に答える 2

3

これにより、同じスコアを持つランクが処理されます。

SELECT  d.*, c.ranks
FROM
        (
          SELECT    Score, @rank:=@rank+1 Ranks
          FROM
                  (
                      SELECT  DISTINCT Score 
                      FROM    tableName a
                      ORDER   BY score DESC
                  ) t, (SELECT @rank:= 0) r
        ) c 
        INNER JOIN tableName d
            ON c.score = d.score
// WHERE   d.username = 'Helen'

例えば

KEY     username    password    score   Ranks
1       Anna        123         5       3
2       Bobby       345         6       2
3       Helen       678         6       2
4       Jon         567         2       4
5       Arthur      ddd         8       1

パフォーマンスを向上させるには、INDEXon 列Scoreを追加します。

ALTER TABLE tableName ADD INDEX (Score)
于 2013-02-28T13:48:58.627 に答える
2
SELECT 
    (SELECT COUNT(*)+1 FROM tablename WHERE score > t.score) as rank,
    * 
FROM
     tablename t
where 
     username='$username'

ORDER BY返される行は1つだけなので、クエリ内のは役に立ちません。

于 2013-02-28T13:47:22.870 に答える