Имеется таблица рейтинга пользователей: users_stat(id_user, total - количество очков рейтинга). Цель - определить место занимаемое определенным пользователем в рейтинге.
Погуглив, нашел следующее решение:
Делаю два запроса к базе данных:
Первым получаю рейтинг текущего пользователя(id пользователя - 4):
SELECT total FROM users_stat WHERE id_user = 4;
[Он оказывается равным, например, 200 очкам рейтинга и использую его в следующем запросе]
Вторым получаю место этого пользователя в рейтинге(id пользователя - 4):
SET @x:=0;
SELECT num FROM (SELECT @x:=@x+1 num, id_user, total FROM users_stat WHERE total > 200-1 ORDER BY total DESC) num WHERE id_user = 4
Как видно из вложенного запроса, здесь происходит вывод всех записей и присвоение каждой номера из переменной x, что мне кажется не оптимизированной и ресурсозатрачиваемой операцией, например, в условии малого рейтинга текущего пользователя, в связи с чем он находится в конце списка всего рейтинга, состоящего, например, из 5000 юзеров и более.
Возможно ли как-то оптимизировать данную операцию, или же существует лучший способ реализовать рейтинг на сайте?