Det finns inget sätt att beräkna ordningen (det du kallar rang) för något utan att först sortera tabellen eller lagra rangen.
Om din tabell är korrekt indexerad dock (index på popularitet) är det trivialt för databasen att sortera detta så att du kan få din rankning. Jag skulle föreslå något i stil med följande:
Välj alla, inklusive rang
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
För att hämta ett objekt med ett specifikt "id" kan du helt enkelt använda en underfråga enligt följande:
Välj en, inklusive rang
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;