No hay forma de calcular el orden (lo que llamas rango) de algo sin ordenar primero la tabla o almacenar el rango.
Sin embargo, si su tabla está indexada correctamente (índice de popularidad), es trivial que la base de datos clasifique esto para que pueda obtener su rango. Yo sugeriría algo como lo siguiente:
Seleccionar todo, incluido el rango
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
Para obtener un elemento con un "id" específico, simplemente puede usar una subconsulta de la siguiente manera:
Seleccione uno, incluido el rango
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;