पहले टेबल को सॉर्ट किए बिना या रैंक को स्टोर किए बिना किसी चीज के ऑर्डर (जिसे आप रैंक कहते हैं) की गणना करने का कोई तरीका नहीं है।
यदि आपकी तालिका को ठीक से अनुक्रमित किया गया है (लोकप्रियता पर सूचकांक) तो डेटाबेस के लिए इसे क्रमबद्ध करना तुच्छ है ताकि आप अपना रैंक प्राप्त कर सकें। मैं कुछ इस तरह का सुझाव दूंगा:
रैंक सहित सभी का चयन करें
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
एक विशिष्ट "आईडी" के साथ एक आइटम लाने के लिए आप बस एक सबक्वेरी का उपयोग इस प्रकार कर सकते हैं:
रैंक सहित किसी एक को चुनें
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;