как получить ранжирование позиции определенной строки, используя только mysql-запрос?

У меня есть таблица Users, которая содержит столбцы: id, name, points, extra_points. Как я могу получить ранжирование позиции для конкретного пользователя, когда ранг представляет собой сумму очков и лишних точек?

Для всех пользователей список ранга Im, использующий этот запрос: "SELECT id, (points + extra_points) AS total FROM users ORDER BY total desc"; и цикл while с тегом html ol (так что есть номер позиции). Но я не знаю, как показать ранг для пользователя sinlge (на странице профиля пользователя)? Любая помощь будет отличной.

 SELECT users1.id, (users1.points+users1.extra_points) AS total, COUNT(*)+1 AS rank FROM users users1 INNER JOIN users users2 ON users1.points+users1.extra_points < users2.points+users2.extra_points WHERE users1.id = $id 

Ну, для одного пользователя вы должны изменить запрос выбора, чтобы он выглядел

 "SELECT (points + extra_points) AS total FROM users WHERE id = $id LIMIT 1" 

Необходимо указать, какой пользователь в качестве предложения WHERE. Кроме того, поскольку вы, по-видимому, уже знаете идентификатор, не нужно его выбирать, и поскольку это всего лишь один пользователь, не нужно также ORDER BY. И LIMIT 1 остановит его от проверки остальной части строк после ее обнаружения.

это не проверено, но я надеюсь, что вы поймете, что моя идея – просто используйте подзапрос, чтобы подсчитать всех пользователей с большим количеством баллов:

 SELECT id, (points + extra_points) AS total, (SELECT COUNT(*) FROM users WHERE (points + extra_points)) >= (u.points + u.extra_points) AS rank FROM users u WHERE id = ?; 

Вот ответ, если у вас есть столбец ClientID и Points в таблице Customer:

 <CFQUERY DATASOURCE="YourDatasource" name="YourQueryName"> SELECT ClientID, (Pts) AS total, (SELECT COUNT(*) FROM Client WHERE (Pts) >= (u.Pts)) AS rank FROM Client u WHERE ClientID = CLIENTID_OF_YOUR_CHOICE_HERE; </CFQUERY>