最初にテーブルを並べ替えるか、ランクを保存しない限り、何かの順序(ランクと呼ばれるもの)を計算する方法はありません。
ただし、テーブルに適切なインデックスが付けられている場合(人気のインデックス)、データベースがこれを並べ替えてランクを取得するのは簡単です。次のようなものを提案します:
ランクを含むすべてを選択
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
特定の「id」を持つアイテムをフェッチするには、次のようにサブクエリを使用するだけです。
ランクを含めて1つ選択してください
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;