/ / SQL leaderboard zobrazenie - mysql, sql, sqlite, únie, leaderboard

SQL leaderboard zobrazenie - mysql, sql, sqlite, union, leaderboard

Snažím sa zobraziť prvých 15 hráčov v mojom rebríčku, ale chcem tiež zabezpečiť, aby sa na ňom zobrazil hráč, ktorý o túto tabuľku požiadal, iba s jednou požiadavkou SQL

Umožňuje znížiť dosku len na 4 hráčov.

Predstavte si, že som "m (kto požiadal o prezeranie tabule) na druhom mieste, by mala tabuľka zobraziť nasledujúce

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

Ale dovoľte si predstaviť, že som "ma zaradil na 150. \ T

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

Ja používam nasledujúcu požiadavku:

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

Ak som sa umiestnil medzi prvými pätnástimi, správne sa ukázalo. Ale ak som "m okolo prvej 15th dotaz vráti 16 riadkov so mnou posledný

Stručne povedané, chcem zobraziť 15 hráčov v rebríčku, ale jeden z nich MUSÍ byť ja

edit: Všimnite si, že dvaja hráči môžu byť na rovnakej pozícii

odpovede:

0 pre odpoveď č. 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

Namiesto toho nevracajte svojmu vlastnému používateľovi v prvom dotaze a obmedzte ho na 14. Potom v druhom dotaze vráťte iba svojho vlastného používateľa.