•  
  • 0
  •  
0

Изменение позиции в рейтинге - как реализовать?

(PHP + MySQL)

Есть: рейтинг игроков двух типов - по кол-ву награбленного и по кол-ву побед. Его можно фильтровать - по фракции (обе, 1-ая, 2-ая), по уровню (все, 1-ый, 2-ой, ...) и по периоду (все время, за сегодня, за неделю, за месяц). Чтобы было понятнее, посмотреть можно тут - http://www.moswar.ru/rating/

Надо: отображать изменение позиции в рейтинге. То есть стрелочки вверх-вниз и на сколько мест упал-поднялся.

Ключевые моменты: при изменении фильтра соответственно меняется и позиция. То есть в рейтинге всех уровней я могу быть на 10-ом месте, а в с фильтром по своему уровню - на первом, например (т.е. изменение позиции должны сохраняться для каждого типа фильтра).

Возможное решение: сделать для каждого набора "тип рейтинга + период + фракция + уровень" по полю - последняя позиция. И когда идет обнуление текущего рейтинга (за день, неделю или месяц) в это поле записывать позицию игрока по каждому набору фильтров. А в дальнейшем при выводе от текущего места отнимать то прошлое место. Это и есть соответственно изменение позиции.

Проблема решения: всего наборов всех фильтров будет 2 (типы рейтингов) * 3 (фильтр фракции) * 3 (фильтр периода) * 13 (фильтр уровня) = 234. Сейчас в этом рейтинге 280к игроков (и количество растет). Соответственно это будет все п-ц как долго.

P.S.: в рейтинге по фильтрам выводятся только первые 1000 игроков. Соответственно, можно пожертвовать сохранением позиции остальных игроков (но если сохранять для всех - будет круто).

P.P.S.: изменение рейтинга надо выводить в общем рейтинге, а не по одному. То есть вариант - копировать таблицу перед обнуленим и считать позицию из этой таблицы не подойдет.

php, mysql, рейтинг.
спросил 649 дней назад Аватор пользователя ackrite ackrite
30
300

1 ответ:

    •  
    • 0
    •  

    Не надо хранить место в рейтинге, лучше - значения за текущий/предыдущий день, неделю, месяц. При таком количестве фильтров дешевле по времени будет рейтинг считать динамически, а потом страницы кешировать.

    ответил 648 дней назад Аватор пользователя potapuff potapuff
    45 1
Чтобы написать ответ, вы должны авторизироваться.