我想做一个排名网格。
我有一个由键索引的不同值的表:
表 SimpleValue : key varchar, value int, playerId int
我有一个有几个 SimpleValue 的播放器。
表播放器:id int,昵称 varchar
现在想象一下这些记录:
简单值:
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 个“左外连接”。有没有办法简化这个查询?
我有第二个问题:有没有办法显示这个排名的一部分。想象一下,我有 1000 名玩家,我想显示 TOP 10,我使用 LIMIT 关键字。现在我想显示玩家 Bob 的排名,即 326/1000,我想在上面和下面显示 5 个排名玩家(所以从 321 到 331 的位置)。我怎样才能实现它?
谢谢。