¿Hay alguna forma de obtener el número de fila real de una consulta?
Quiero poder ordenar una tabla llamada league_girl por un campo llamado score; y devuelva el nombre de usuario y la posición real de la fila de ese nombre de usuario.
Quiero clasificar a los usuarios para poder saber dónde está un usuario en particular, es decir. Joe ocupa la posición 100 de 200, es decir
User Score Row
Joe 100 1
Bob 50 2
Bill 10 3
He visto algunas soluciones aquí, pero he probado la mayoría y ninguna de ellas devuelve el número de fila.
He intentado esto:
SELECT position, username, score
FROM (SELECT @row := @row + 1 AS position, username, score
FROM league_girl GROUP BY username ORDER BY score DESC)
Como derivado
... pero no parece devolver la posición de la fila.
¿Algunas ideas?
Respuestas:
Es posible que desee probar lo siguiente:
La
JOIN (SELECT @curRow := 0)
parte permite la inicialización de la variable sin requerir unSET
comando por separado .Caso de prueba:
Consulta de prueba:
Resultado:
fuente
@curRow
reemplazando laJOIN
declaración con una coma, así:FROM league_girl l, (SELECT @curRow := 0) r
ORDER BY
?fuente
Aquí viene la estructura de la plantilla que utilicé:
Y aquí está mi código de trabajo:
fuente
También puedes usar
para inicializar la variable del contador.
fuente
@curRow
aún puede tener un valor de la última vez que ejecutó esta consulta en la sesión actual.Suponiendo que MySQL lo admita, puede hacer esto fácilmente con una subconsulta estándar de SQL:
Para grandes cantidades de resultados mostrados, esto será un poco lento y, en su lugar, querrá cambiar a una autounión.
fuente
Si solo desea saber la posición de un usuario específico después de ordenar por puntaje de campo, simplemente puede seleccionar todas las filas de su tabla donde el puntaje de campo es más alto que el puntaje del usuario actual. Y use el número de fila devuelto + 1 para saber qué posición de este usuario actual.
Suponiendo que su tabla es
league_girl
y su campo principal lo esid
, puede usar esto:fuente
Encontré la respuesta original increíblemente útil, pero también quería tomar un cierto conjunto de filas en función de los números de fila que estaba insertando. Como tal, envolví toda la respuesta original en una subconsulta para poder hacer referencia al número de fila que estaba insertando.
Tener una subconsulta en una subconsulta no es muy eficiente, por lo que valdría la pena probar si obtiene un mejor resultado haciendo que su servidor SQL maneje esta consulta, o obteniendo la tabla completa y haciendo que la aplicación / servidor web manipule las filas después del hecho. .
Personalmente, mi servidor SQL no está demasiado ocupado, por lo que era preferible que manejara las subconsultas anidadas.
fuente
Sé que el OP está pidiendo una
mysql
respuesta, pero como encontré que las otras respuestas no me funcionan,order by
Entonces, para ahorrar tiempo a otros como yo, simplemente indexe la fila después de recuperarlos de la base de datos
ejemplo en PHP:
ejemplo en PHP usando desplazamiento y límite para paginación:
fuente