Autor Zpráva
Mesiah
Profil
Dobrý den,

prosím Vás, řešim takový dotaz na db. Chci získat prvních 10 záznamů podle skore + záznam aktuálního uživatele a jejich pořadí.
Např.: Řekněmě že mám sportovní kluby, je jich 100. Můj klub je 67. a jako výstup chci prvních 10 + můj 67. klub a to včetně jijich umístění v žebříčku... Tedy:

1. Gumídci 1105 bodů
2. Šmoulové 998 bodů
...
10. Žraloci 801 bodů
----------------------------
67. Frajeři 509 bodů

Poradíte mi prosím? :)
Tomáš K.
Profil *
Jde to pomocí dotazu
SELECT * FROM kluby ORDER BY skore LIMIT 10 UNION SELECT * FROM kluby WHERE id = <id>,
rozmyslete si, jestli to dělá, co chcete, pokud bude klub hráče mezi prvními deseti.
mimochodec
Profil
Když si to představím v praxi, tak o tom "mém" klubu budeš pravděpodobně někde na stránce vypisovat víc informací. Než se zamotávat do UNIONŮ a pak je zase rozmotávat pomocí nějakých php konstrukcí, doporučil bych pro ten aktuální klub použít extra dotaz, ať už v místě, kde potřebuješ tenhle výpis, nebo někde nad ním.
To jen navíc k tomu, co píše Tomáš K..
Mesiah
Profil
mimochodec: Nene, chci jenom tento žebříček
Tomáš K.: Toto řešení mě přirozeně napadlo, ale pořád to není to co chci... Není tam číslo řádku (hlavně u "mého" klubu). Ukládat v db sloupec s pořadím a při každém novém vložení provést přečíslování je šílenost...

Nějaké jiné nápady??
mimochodec
Profil
Mesiah:
Nějaké jiné nápady??

Dva dotazy. Nejdřív pořadí "mého" klubu.
SELECT COUNT(*) FROM kluby WHERE skore > mojeskore

mojeskore bude buď číslo, pokud ho znáš, nebo (SELECT skore FROM kluby WHERE ID=xx)
Potom výpis top 10. Případné zařazení tvého klubu ošetříš v php.
Mesiah
Profil
Něco podobného mě napadlo, ale mám obavu o rychlost... Ale to budu řešit, až to bude potřeba... ;)

SELECT @radek:=@radek+1 rownum, t.* from (select @radek:=0) r, vysledky t LIMIT 10 UNION
SELECT (SELECT COUNT(*) FROM vysledky WHERE skore > mojeskore) rownum, vysledky.* FROM vysledky WHERE ID = id

Díky za rady!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0