Der er ingen måde at beregne rækkefølgen (det du kalder rang) af noget uden først at sortere tabellen eller gemme rangeringen.
Hvis din tabel dog er korrekt indekseret (indeks på popularitet), er det trivielt for databasen at sortere dette, så du kan få din rang. Jeg vil foreslå noget i stil med følgende:
Vælg alle, inklusive rangering
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
For at hente en vare med et specifikt "id" kan du blot bruge en underforespørgsel som følger:
Vælg en, inklusive rangering
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;