Не вижу проблем. Лучший по некоторому значению "score" - что вы в него запишите, дело ваше. Например количество комментариев в сутки, неделю или месяц. Зависит от самого вашего рейтинга.
1 - Выбрать 100 записей из БД сортировать по
score по возрастанию и дате
обновления по убыванию
2 - Создать таблицу РЕЙТИНГ один к одному с любыми полями
3 - Добавить выбранные записи в полученном порядке
ID в таблице РЕЙТИНГ AUTO_INCREMENT - в нем будут НОМЕРА МЕСТ от 1 до 100 автоматически. При объединении таблиц в строке пользователя RATING_ID уже будет номер рейтинга. А у остальных NULL
* При обновлении этой таблицы - очистите её со сбросом AUTO_INCREMENT
---
Вариант #2
После получения 100 записей - Просто циклом обойдите и сделайте UPDATE по полученным ID в таблицу пользователей в её отдельное поле НОМЕР В РЕЙТИНГЕ - туда ставьте значение счетчика цикла
for ($i = 1; $i <= 100; $i++) {
"UPDATE `users` SET rating_position = ".$i." WHERE ...
}
# или foreach по выборке $i = 1; снаружи и $i++ внутри цикла
---
это, если в базе тысячи пользователей?
Да хоть сколько, вы же выбирать будете только 100 по значению "score" которое сами и посчитаете заранее
---
# Запасной вариант
У всех пользователей будет РЕЙТИНГ от 0 до 5 - но плавающий. Например от 0 до 5000000 а для отображения делите на 1000000 - тогда 4832156 станет 4.832156 можете показывать округленно как 4.8 или 5
* Но сортировка топа по значению поля в базе 4832156 и дате обновления
* Тогда сможете выбирать любое количество - топ 3 (5, 10, 100, 1000...) в любой момент
** Хранить дробь в БД типа 4.8321563465464531354655.... не рекомендуется, но вы можете :)