На веб-сайте, основанном на PHP и CodeIgniter, пользователи могут зарабатывать репутацию за различные действия, в отличие от переполнения стека. Каждый раз, когда присуждается репутация, в таблице MySQL создается новая запись с user_id
, поощряемым действием и значением этого набора баллов (например, 10 репутации). Одновременно обновляется поле в таблице users
, reputation_total
.
Поскольку все это бессмысленно без системы отсчета, я хочу показать пользователям их процентильный ранг среди всех пользователей. Для полной репутации это кажется достаточно простым. Допустим, мой user_id
- 1138
. Просто подсчитайте количество пользователей в таблице users
с на 1009 * меньше, чем у меня, подсчитайте общее количество пользователей и разделите, чтобы найти процент пользователей с более низкой репутацией, чем у меня. Это будет процентиль ранга пользователя 1138, верно? Легко!
Но я также показываю итоги репутации за разные промежутки времени - например, заработанные за последние семь дней, что включает в себя запрос к таблице репутации и суммирование всех моих очков, заработанных с данной даты. Я также хотел бы показать процентильный ранг для разных промежутков времени - например, я могу быть 11-м процентилем в целом, но 50-м процентилем в этом месяце и 97-м процентилем сегодня.
Кажется, мне пришлось бы пройтись и найти итоги репутации всех пользователей за данный промежуток времени, а затем посмотреть, куда я попадаю в эту группу, не так ли? Разве это не ужасно громоздко? Какой лучший способ сделать это?
Большое спасибо.