ランキングを取得するSQL です。
同じスコアの場合は同じ順位にするなどの必要があるため結構面倒ですが、
下記SQL でイッパツで取得できます。

実際に携帯ゲームのランキングを取得するのに使用しているSQLです。

ranking テーブル

CREATE TABLE ranking (
  id bigint(20) NOT NULL auto_increment,
  name varchar(20) NOT NULL,
  score bigint(20) NOT NULL,
);

SQL

SELECT
    r1.name,
    r1.score,
    (SELECT count(r2.score)
     FROM ranking as r2
     WHERE r2.score>r1.score)+1 as rank
FROM ranking as r1
ORDER BY r1.score DESC
LIMIT 10;

rank というカラム名で順位が計算されます。
同じスコアの場合は順位は同じになります。

上記SQL はトップ10を取得していますが、実際にはLIMIT句を変更することにより
ページング処理などで下位のランキングを見れるようにしています。

副問い合わせで順位を計算しています。
MySQL ではバージョンが4.1 以降でないと副問い合わせが使用できないので注意してください。

※本運用ではインデックスを適宜作成しています。

関連する投稿