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 № 1SELECT * 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.