Я написал маленькую глупую игру и хочу иметь какой-то сайт лидеров.
Обычно таблицы лидеров ограничены 10 или 20 топ-игроками, но я подумал, что было бы неплохо, если бы я мог записать, для каждого игрока, их лучший результат . Тогда я всегда мог показать их всемирное звание.
Простая схема, такая как:
create table leaderboard (
userid varchar(128) not null,
score real not null,
when datetime not null
);
create index on leaderboard(userid);
Хранит минимальное количество необходимой мне информации - 1 запись на пользователя с лучшим счетом.
Мой вопрос вращается вокруг того, как эффективно определить чью-либо позицию в таблице лидеров. Общая идея заключается в том, что я хотел бы, чтобы их позиция в списке возвращалась:
select userid from leaderboard order by score desc
Но запуск этого запроса с последующим линейным поиском в списке кажется мне немного нелепым с точки зрения производительности БД. Несмотря на это, мне трудно представить запрос / схему, которая бы сделала его быстрой операцией.
Есть идеи?
(Я бы предпочел сохранить схему БД и общий запрос (не привязанным к поставщику). Но, если один поставщик делает это проще, я с удовольствием использую либо MS SQL, либо MySQL.