Non c'è modo di calcolare l'ordine (quello che chiami rango) di qualcosa senza prima ordinare la tabella o memorizzare il rango.
Tuttavia, se la tua tabella è indicizzata correttamente (indice di popolarità) è banale per il database ordinarlo in modo da poter ottenere il tuo grado. Suggerirei qualcosa di simile al seguente:
Seleziona tutto, incluso il grado
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
Per recuperare un elemento con un "id" specifico, puoi semplicemente utilizzare una sottoquery come segue:
Selezionane uno, incluso il grado
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;