Utilizando o MySQL, como faço para selecionar o resultado da consulta de classificação de uma determinada linha?

StackOverflow https://stackoverflow.com/questions/1262448

  •  12-09-2019
  •  | 
  •  

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.

Foi útil?

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%'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top