Utilizando o MySQL, como faço para selecionar o resultado da consulta de classificação de uma determinada linha?
Pergunta
Eu já passei muito tempo tentando várias coisas, mas nenhuma delas parece funcionar.Aqui está a minha situação, eu gostaria de ser capaz de selecionar a posição de uma linha baseada na IDENTIFICAÇÃO de um especificamente ordenados linha
Por exemplo, se a minha consulta é algo como:
SELECT id, name FROM people ORDER BY name ASC
com resultados como:
id name 3 Andrew 1 Bob 5 Joe 4 John 2 Steve
Eu gostaria de obter a classificação (que linha ele acaba nos resultados) sem retornar todas as linhas e o ciclo jogá-los até eu chegar ao que eu quero (em PHP).
Por exemplo, eu gostaria de selecionar o "rank" de "Steve", para que ele retorna-neste caso-5 (e não o seu id, mas o 'ranking' de seu nome, na consulta acima).
Da mesma forma, eu gostaria de ser capaz de selecionar a classificação de qualquer linha tem o ID de 1.Para este exemplo, eu gostaria de voltar um 'ranking' de 2 (porque é que uma linha do resultado não é um ID de 1) e nada mais.
Eu tenho o Google seria o máximo que eu podia, com resultados variados...quer ter muito lento consultas para tabelas maiores ou ter de criar todos os tipos de tabelas temporárias e variáveis de utilizador (ex-eu REALMENTE gostaria de evitar, o último que eu suponho que eu possa viver com).
Qualquer ajuda ou esclarecimento seria muito apreciada.
Solução
a partir de artfulsoftware:
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
Outras dicas
Algo como isso?
SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
FROM people
ORDER BY name ASC)
WHERE Row = @SomeRowNumber
Se você quer ir pelo ID, basta alterar a cláusula where.
Tente isso:
SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
Eu tento esse código...pode ajudar outros Estou recebendo o resultado de usuários e fazer o upload de tabela para o perfil de utilizador pic e se juntar a ele que depois eu sou o cálculo de usuário de pontos e classificação no-los.Finalmente estou de verificar e adicionar o número da linha de classificação para os usuários...Injoy-lo.obrigado
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%'