Er is geen manier om de volgorde (wat je rang noemt) van iets te berekenen zonder eerst de tabel te sorteren of de rangorde op te slaan.
Als uw tabel echter correct is geïndexeerd (index op populariteit), is het triviaal voor de database om dit te sorteren, zodat u uw rang kunt bepalen. Ik zou iets als het volgende voorstellen:
Alles selecteren, inclusief rang
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
Om een item met een specifieke "id" op te halen, kunt u eenvoudig als volgt een subquery gebruiken:
Selecteer er een, inclusief rang
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;