El uso de MySQL, ¿cómo selecciono consulta rango resultado de una fila en particular?

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

  •  12-09-2019
  •  | 
  •  

Pregunta

He pasado mucho tiempo tratando hoy varias cosas, pero ninguno de ellos parece funcionar. Aquí está mi situación, me gustaría ser capaz de seleccionar el rango de una fila basado en su ID de una fila específicamente ordenados

Por ejemplo, si mi consulta es algo como:

SELECT id, name FROM people ORDER BY name ASC

Con resultados como:

id   name
3    Andrew
1    Bob
5    Joe
4    John
2    Steve

Me gustaría conseguir el rango (lo fila que termina en los resultados) sin devolver todas las filas y bucles tirarlos hasta que llego a la que yo quiero (en PHP).

Por ejemplo, me gustaría seleccionar el 'ranking' de 'Steve' para que vuelva - en este caso - 5 (no es su identificación, pero el 'ranking' de su nombre en la consulta anterior) .

Del mismo modo, me gustaría ser capaz de seleccionar el rango de cualquier fila tiene el ID de 1. Para este ejemplo, me gustaría devolver un 'ranking' de 2 (porque eso es en lo que hay fila de resultados un ID de 1) y nada más.

He Google'd tanto como pude con diferentes resultados ... ya sea que tenga consultas muy lento para tablas grandes o tener que crear todo tipo de tablas temporales y variables de usuario (la antigua Realmente me gustaría evitar , este último supongo que puedo vivir con).

Cualquier ayuda o penetración sería muy apreciados.

¿Fue útil?

Solución

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

Otros consejos

Algo como esto?

SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
      FROM people
      ORDER BY name ASC)
WHERE Row = @SomeRowNumber

Si quieres ir por el ID, simplemente alterar la cláusula where.

Prueba esto:

SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC

Trato de este código puede ayudar a otra ... Me estoy haciendo producen cuando un usuario y cargar la tabla de perfil de usuario pic y me uno a él que después que haya calcular los puntos de usuario y la clasificación en ellos. Por fin estoy comprobando y añadiendo el número de fila para la clasificación para los usuarios ... Injoy ella. gracias

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top