/ / Visualización de la tabla de clasificación de SQL: mysql, sql, sqlite, union, leaderboard

Visualización de la tabla de clasificación de SQL: mysql, sql, sqlite, union, leaderboard

Estoy tratando de mostrar los primeros 15 jugadores de mi tabla de clasificación, pero también quiero asegurarme de que aparezca el jugador que solicitó la tabla de clasificación, con solo una solicitud de SQL

Permite reducir el tablero solo a 4 jugadores.

Imagina que yo "m (quien solicitó ver el tablero) clasificado en el segundo lugar, el tablero debería mostrar lo siguiente

pos,name
1,bob
2,ME
3,tony
4,andy

Pero imaginemos que estoy en el puesto 150, entonces el tablero debería aparecer como

pos,name
1,bob
2,tony
3,andy
150,ME

Estoy usando la siguiente solicitud:

SELECT * FROM
(
SELECT name,rating,
(SELECT COUNT(*)
FROM rank AS t2
WHERE t2.rating > t1.rating)
AS position FROM rank AS t1
LIMIT 15
)

UNION

SELECT name,rating,(SELECT COUNT(*)
FROM rank AS t2
WHERE t2.rating > t1.rating)
AS position FROM rank AS t1
WHERE t1.name = "ben"

ORDER BY rating DESC

Si estoy clasificado entre el primer 15º, el tablero se muestra correctamente. Pero si pasé el primer día 15, la consulta devolvió 16 filas y yo fui el último

En resumen, quiero mostrar 15 jugadores en la tabla de clasificación, pero uno de ellos DEBE ser yo.

Edición: Tenga en cuenta que dos jugadores pueden estar en la misma posición de rango.

Respuestas

0 para la respuesta № 1
SELECT * FROM
(
SELECT name,rating,
(SELECT COUNT(*)
FROM rank AS t2
WHERE t2.rating > t1.rating
AND t1.name <> "ben")
AS position FROM rank AS t1
LIMIT 14
)

UNION

SELECT name,rating,(SELECT COUNT(*)
FROM rank AS t2
WHERE t2.rating > t1.rating)
AS position FROM rank AS t1
WHERE t1.name = "ben"

ORDER BY rating DESC

Aquí, en lugar de eso, no devuelva su propio usuario en la primera consulta y limítelo a 14. Luego, en la segunda consulta, solo devuelva su propio usuario.