Я хочу сделать рейтинг сетки.
У меня есть таблица с различными значениями, проиндексированными ключом:
Таблица SimpleValue: ключ varchar, значение 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
На данный момент я генерирую SQL-запрос, основанный на том, какой ключ SimpleValue вы хотите отобразить, и на каком ключе SimpleValue вы хотите заказать игроков.
Например: я хочу отобразить '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 игроков, и я хочу отобразить ТОП 10, я использую ключевое слово LIMIT. Теперь я хочу отобразить ранг игрока Боба, который равен 326/1000, и я хочу отобразить 5 ранга игрока выше и ниже (т.е. от 321 до 331 позиции). Как мне этого добиться?
спасибо.