ランキンググリッドをやりたいです。
キーでインデックス付けされたさまざまな値を持つテーブルがあります。
テーブルSimpleValue:key varchar、value int、playerId int
SimpleValueがいくつかあるプレーヤーがいます。
テーブルプレーヤー:id int、ニックネームvarchar
次に、これらのレコードを想像してください。
SimpleValue:
Key value playerId
for 1 1
int 2 1
agi 2 1
lvl 5 1
for 6 2
int 3 2
agi 1 2
lvl 4 2
プレーヤー:
id nickname
1 Bob
2 John
これらのプレーヤーのランクをさまざまなSimpleValueに表示したいと思います。何かのようなもの:
nickname for lvl
Bob 1 5
John 6 4
今のところ、表示するSimpleValueキーと、プレーヤーを注文するSimpleValueキーに基づいてSQLクエリを生成します。
例:各プレーヤーの「lvl」と「for」を表示し、「lvl」で注文したい
生成されるクエリは次のとおりです。
SELECT p.nickname as nickname, v1.value as lvl, v2.value as for
FROM Player p
LEFT OUTER JOIN SimpleValue v1 ON p.id=v1.playerId and v1.key = 'lvl'
LEFT OUTER JOIN SimpleValue v2 ON p.id=v2.playerId and v2.key = 'for'
ORDER BY v1.value
このクエリは完全に実行されます。しかし、10個の異なる値を表示したい場合は、10個の「左外部結合」が生成されます。このクエリを単純化する方法はありますか?
2番目の質問があります:このランキングの一部を表示する方法はありますか?1000人のプレーヤーがいて、TOP 10を表示したい場合、LIMITキーワードを使用するとします。ここで、プレーヤーBobのランク(326/1000)を表示し、上下に5ランクのプレーヤー(つまり、321から331の位置)を表示します。どうすればそれを達成できますか?
ありがとう。