Autor Zpráva
Vanama
Profil
Možná je to hloupý dotaz, ale třeba něco takového funguje a opravdu o tom nevím :)

Je možné s databaze získat pořadí řádku dle nějakého řazení (score DESC)?
Abych to vysvětlil. Mám tabulku s výsledky her hráčů a hodilo by se mi zobrazit skóre včetně umístění hráče, který si to právě prohlíží.
Ptám se proto, protože jediné řešení, které mě napadá je vyselectovat všechny skóre a pomocí php je projít a počítat než dorazím k výsledku daného uživatele, což není asi úplně ideální řešení. Obávám se však, mysql nic takového neumí.
panther
Profil
Vanama
Je možné s databaze získat pořadí řádku dle nějakého řazení (score DESC)?
ano.
... ORDER BY score DESC
Vanama
Profil
Tohle nemyslím, asi jsem se špatně vyjádřil. Nechci výpis, chci jen pořadí.

Mám v mysql např. řádky:

userid gameid score
54       32         300
65       32         400
100     32         350


Z tohodle bych chtěl dostat např. číslo (2) jako umístění podle skóre, když se budu ptát na uživatele s id 100. Otázka je jestli to jde vyndat z db bez použití php skriptu.
Alphard
Profil
Možná nějak takhle
select count(userid) + 1 poradi from tabulka where score > (select score from tabulka where userid = 100)


Opraveno obrácené porovnání.
Vanama
Profil
Díky, tohle funguje :)
Akorát phpmyAdmin mi u toho nechce napsat kolik času dotaz zabral :)
TomášK
Profil
Tohle je použitelné, pokud vybíráš jednoho uživatele. Pokud bys potřeboval očíslovat víc záznamů nebo celou tabulku, má to kvadratickou složitost, může to být pomalé. Pořadí bych vložil jako další sloupec a aktualizoval ho při vkládání dat, pokud je to možné.
Koukni i do FAQ na číslování řádku, mohlo by se hodit...
Vanama
Profil
Bohužel pořadí se stále mění s vkládáním nových záznamů.

Od Alpharda to funguje dobře a řekl bych i rychle. Když jsem změnil dotaz (nepoužil jsem gameid), tak to z více jak 100 tisíc záznamů vyplyvlo číslo kolem 38 tis za 0,012 vteřin.

Díky všem za rady.
Alphard
Profil
Možná by bylo ještě rychlejší mít count(score) a index na sloupci score.

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