Không có cách nào để tính toán thứ tự (cái mà bạn gọi là xếp hạng) của thứ gì đó mà không sắp xếp bảng hoặc lưu trữ thứ hạng trước.
Tuy nhiên, nếu bảng của bạn được lập chỉ mục đúng cách (chỉ mục dựa trên mức độ phổ biến) thì cơ sở dữ liệu sẽ không sắp xếp thứ này để bạn có thể có được thứ hạng của mình. Tôi muốn đề xuất một cái gì đó như sau:
Chọn tất cả, bao gồm cả xếp hạng
SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;
Để tìm nạp một mục với một "id" cụ thể, bạn có thể chỉ cần sử dụng một truy vấn con như sau:
Chọn một, bao gồm cả xếp hạng
SET @rank := 0;
SELECT * FROM (
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity
) t2
WHERE t2.id = 1;