アプリ版:「スタンプのみでお礼する」機能のリリースについて

同順位を考慮したランクの取得について(1~55位まで)
下記の2つのテーブルがあります。

rankingscoreinfo
フィールド名 型 長さ
missionid integer 4 NOT NULL
name varchar 20 NOT NULL
skill integer 4 NOT NULL
score integer 4 NOT NULL


rankinginfo
フィールド名 型 長さ NOT NULL
missionid integer 4 NOT NULL
name varchar 20 NOT NULL
kind integer 4 NOT NULL

missionidとname2つのテーブルの共通フィールドです。


この二つを組み合わせて同順位を考慮したスコアランキングを作成したいです。
1位のscoreが3人同点の場合、3人のスコアランキングは1位で次の人は4位になるようにしたいです。
SQLを組んだのですがレコード数が増えるにつれてどんどんSQLが返ってくる速度が遅くなって困っています。
この二つのテーブルの最速のSQLを組みたいのですがどなたか教えて下さい。
とりあえずINDEXは考慮なしでお願いします。


参考までに私が組んだSQLは下記のものになります。


SELECT
d.name
FROM
(SELECT
*,
(SELECT
COUNT(a.score)+1
FROM
rankingscoreinfo AS a ,
rankinginfo as b
WHERE
a.missionid=10
AND a.skill= 2
AND b.kind = 2
AND a.missionid = b.missionid
AND a.name = b.name
AND a.score > c.score
) AS score_rank
FROM
rankingscoreinfo AS c
WHERE
c.missionid = 10
AND c.score
AND c.skill=2
) AS d ,
rankinginfo as e
WHERE
e.missionid = 10
AND e.kind = 2
AND d.skill = 2
AND d.missionid = e.missionid
AND d.name = e.name
AND d.score_rank >=1 AND d.score_rank <= 55
ORDER BY
score_rank

A 回答 (1件)

2つのテーブルの相関関係がいまいちわからない



なぜ2つに分けているか?
それぞれがどういうデータをもっていて
どう表示したいのか簡単な例示はできますか?

この回答への補足

簡易ゲームの作成をやっています。
missionidはミッションの種類で20のミッションのデータをもっています
nameはプレイヤーの名前のデータを持っています。
二つのテーブルの共通のデータです。

rankingscoreinfoの

skillは技スキル10種類のデータを持っています。
scoreは攻撃したときのダメージの総スコアです。


rankinginfoの
kindはプレイヤーの初心者・中級・上級にわけるように作られた3つのデータを持っています。

あるmissionid(ミッション)から特定のskill(技スキル)でscore(ダメージの総スコア)が高いname(プレイヤー)のランキングをkind(初級・中級・上級)にわけてだしたいです。

元々rankingscoreinfoはscoreの集計だけをやっていて、rankinginfoは初級とかの振り分けで使っていたテーブルなのですがscoreとkindを考慮したランキングを作ろうということで二つのテーブルを利用してランキングを作ることになりました。

表示としては
rank name score
-----------------------
1 hitomi 10
1 numata 10
3 rika 9
4 mika 7
5 sari 6
5 siho 6
5 miho 6
8 machi 3

という風に表示させたいです。

補足日時:2014/03/02 17:58
    • good
    • 0
この回答へのお礼

2日考えたらできちゃいました☆

お礼日時:2014/03/03 16:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!