Используя MySQL, как мне выбрать ранг результата запроса для одной конкретной строки?
Вопрос
Сегодня я потратил довольно много времени, пробуя разные вещи, но, похоже, ни одна из них не работает.Вот моя ситуация, я хотел бы иметь возможность выбирать ранг строки на основе ее идентификатора из специально отсортированной строки
Например, если мой запрос выглядит примерно так:
SELECT id, name FROM people ORDER BY name ASC
с такими результатами, как:
id name 3 Andrew 1 Bob 5 Joe 4 John 2 Steve
Я хотел бы получить ранг (в какой строке он заканчивается в результатах), не возвращая все строки и не зацикливая их, пока я не доберусь до той, которую я хочу (в PHP).
Например, я хотел бы выбрать "ранг" "Стива", чтобы он возвращал - в данном случае - 5 (не его идентификатор, а "ранг" его имени в приведенном выше запросе).
Аналогично, я хотел бы иметь возможность выбирать ранг любой строки с идентификатором 1.Для этого примера я хотел бы вернуть "ранг", равный 2 (потому что именно в этой строке результата есть идентификатор 1) и ничего больше.
Я погуглил столько, сколько смог, с разными результатами...либо у меня действительно медленные запросы к таблицам большего размера, либо мне приходится создавать всевозможные временные таблицы и пользовательские переменные (первого я бы ДЕЙСТВИТЕЛЬНО хотел избежать, со вторым, я полагаю, я смогу смириться).
Мы были бы очень признательны за любую помощь или понимание.
Решение
от хитрое программное обеспечение:
SELECT p1.id, p1.name, COUNT( p2.name ) AS Rank
FROM people p1
JOIN people p2
ON p1.name < p2.name
OR (
p1.name = p2.name
AND p1.id = p2.id
)
GROUP BY p1.id, p1.name
ORDER BY p1.name DESC , p1.id DESC
LIMIT 4,1
Другие советы
Что-то вроде этого?
SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
FROM people
ORDER BY name ASC)
WHERE Row = @SomeRowNumber
Если вы хотите использовать идентификатор, просто измените предложениеwhere.
Попробуй это:
SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
Я пробую этот код...может помочь другим Я получаю результат от пользователей и загружаю таблицу для изображения профиля пользователя и присоединяюсь к ней после того, как я подсчитываю баллы пользователя и сортирую по ним.Наконец-то я проверяю и добавляю номер строки для ранжирования пользователей...Наслаждайся этим.Спасибо
set @row_num = 0;
set @calp =0;
select if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE '%ph%'