Няма начин да изчислите реда (това, което наричате ранг) на нещо, без първо да сортирате таблицата или да съхраните ранга.
Ако вашата таблица обаче е правилно индексирана (индекс на популярност), за базата данни е тривиално да сортира това, за да можете да получите своя ранг. Бих препоръчал нещо като следното:
Изберете всички, включително ранг
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
За да извлечете елемент с конкретен "id", тогава можете просто да използвате подзаявка, както следва:
Изберете един, включително ранг
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;