ну вот если хочется поизвращаться :)
SET @place := 0, @map_id := 0;
SELECT
IF(@map_id != map_id, @place := 1, @place := @place + 1) AS place,
IF(@map_id != map_id, @map_id:=map_id, map_id) AS map_id,
user_id, map_score , level, @place
FROM (
SELECT m.map_id, m.user_id, m.score AS map_score, p.level
FROM MapsScores AS m, PlayersData AS p
WHERE m.user_id = p.id
GROUP BY m.map_id, m.user_id
ORDER BY m.map_id ASC, m.score DESC
) AS tops
GROUP BY map_id, user_id HAVING place <= СКОЛЬКО_НАРОДУ_ХОТИТЕ_В_ТОП
ORDER BY map_id ASC, map_score DESC
но проще сделать 50 запросов на каждую карту в отдельности — мускул вам будет благодарен :)