Нет способа вычислить порядок (то, что вы называете рангом) чего-либо без предварительной сортировки таблицы или сохранения ранга.
Однако, если ваша таблица правильно проиндексирована (индекс популярности), это тривиальнодля базы данных, чтобы отсортировать это, чтобы вы могли получить свой ранг.Я бы предложил что-то вроде следующего:
Выбрать все, включая ранг
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
Чтобы получить элемент с определенным идентификатором, вы можете просто использовать подзапрос следующим образом:
Выберите один, включая ранг
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;