Недавно я разработал мобильную игру (LAMP + memcached).
В игре есть таблица очков игрока. В таблице есть member_id
, name
, score
column.
Я хочу показать лидеру (глобальный рейтинг) нашему пользователю.
Просто запросите SELECT * FROM score ORDER BY score DESC
и покажите результат.
Но я не думаю, что это хороший путь. Если пользователи достигают 20 миллионов, этот запрос кажется ужасным. Какова наилучшая практика в этом случае? Не могли бы вы дать мне совет?
И как я могу проверить рейтинг конкретного пользователя? Я хочу показать каждый пользовательский ранг, где они есть.
Ну, вы не хотите показывать миллионы пользователей на лидирующей доске?
SELECT * FROM score ORDER BY score DESC LIMIT 10
Выберет 10 лучших
Кроме того, если вы хотите отобразить рейтинг пользователей на странице профиля, это должно сделать:
SELECT COUNT(*) + 1 AS rank FROM score WHERE score > (SELECT score FROM score WHERE member_id = :member_id);
Вы просто добавляете текущих пользователей member_id к последнему запросу, и он будет считать все строки впереди и добавить 1 к этому.