Чтобы получить рейтинг пользователя:
(SELECT * FROM (
SELECT
RANK() OVER (ORDER BY Score desc ,Karma desc) AS ranking,
Id,
Username,
Score, karma
FROM Players
) AS players_ranked_by_score
where Id = id_of_user
Где id_of_user - параметр, содержащий идентификатор текущего игрока. Чтобы получить соседних игроков и текущего пользователя:
(SELECT * FROM (
SELECT
RANK() OVER (ORDER BY Score desc ,Karma desc) AS ranking,
Id,
Username,
Score, karma
FROM Players
) AS all_players_ranked
where ranking >= player_ranking - 2 and ranking <= player_ranking + 2;
Где player_ranking - это рейтинг, полученный из запроса выше.
Надеюсь, это поможет!
Обновление : MySQL не имеет функции rank () (в MS SQL, Oracle, Postgres есть такая функция). Я посмотрел вокруг и получил эту ссылку, объясняющую, как сделать ранжирование в MySQL: http://www.artfulsoftware.com/infotree/queries.php?&bw=1024#460.