Nie ma sposobu, aby obliczyć kolejność (co nazywasz rangą) czegoś bez uprzedniego posortowania tabeli lub zapisania rangi.
Jeśli jednak Twoja tabela jest prawidłowo zaindeksowana (wskaźnik popularności), posortowanie tego w bazie danych, tak abyś mógł uzyskać swoją pozycję, jest trywialne. Proponuję coś takiego:
Zaznacz wszystko, w tym pozycję
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
Aby pobrać element o określonym „identyfikatorze”, możesz po prostu użyć podzapytania w następujący sposób:
Wybierz jeden, w tym rangę
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;