webForumDet fria alternativet

SQL - highscore

10 svar · 337 visningar · startad av JonasG

JonasGMedlem sedan mars 2001148 inlägg
#1

Hej!

Letat på forumet men inte hittat vettigt svar. Liknande men inte fått det att fungera...

Jag sparar "spelare", "poang", "tid" i tabellen "spel".

Jag vill sedan plocka ut topp 10 spelare och deras "poang".
Alltså en spelare står bara med en gång...

Borde ju inte vara så svårt men jag är inte så haj...

VimpMedlem sedan juli 20022 537 inlägg
#2

Menar du så här?

SELECT DISTINCT TOP 10 poang FROM tabellen ORDER BY poang DESC

Distinct hämtar endast unika poster.

@ndersMedlem sedan juni 200032 969 inlägg
#3

Vimp skrev:

Menar du så här?

SELECT DISTINCT TOP 10 poang FROM tabellen ORDER BY poang DESC

Distinct hämtar endast unika poster.

Kan vara bra att ha med kolumnen spelare i SQL-frågan också. ;)

Tipsar om SQL-forumet

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Flyttas från ASP

Om du bara vill ha varje spelare en gång och dennes högsta poäng.

select top 10 poang,spelare
from t as q
where poang in (select max(poang) from t
where spelare = q.spelare)
order by poang desc

TOP 10 kan behöva bytas beronde på DBMS

JonasGMedlem sedan mars 2001148 inlägg
#5

Hej!

Använder nu:

select top 10 medel, spelare from reagera as q where medel in (select min(medel) from reagera where spelare = q.spelare) order by medel asc

men sidan blir mkt segladdad? Kan man göra något åt det?

Tack för hjälp förresten!

aasahMedlem sedan mars 20034 471 inlägg
#6

Borde bli samma som:

select top 10 medel, spelare 
from reagera as q where medel = 
   (select min(medel) from reagera where spelare = q.spelare) order by medel asc

Eftersom min(.) lämnar ifrån sig exakt ETT tal. Vet inte om det går fortare, dock.

Fast... vad gör du egentligen? :q Det borde ju ge samma resultat som:

select top 10 min(medel) as med, spelare 
from reagera
order by med asc;

Det borde gå snabbare.

JonasGMedlem sedan mars 2001148 inlägg
#7

Asså sär hära ligger det till:

Har gjort ett spel i flash som går ut på att ha så kort reaktionstid som möjligt.
När en ring byter färg, skall man klicka.

I tabellen sparas spelare (spelarnamn), medel (snitttid över 5 rundor), tid (när rundan sparades).

Har ett gäng resultatlistor till detta då.
Nämligen:

Topp 10 tider

select top 10 spelare, medel FROM reagera order by medel asc, spelare asc

Topp 10 av dig

SELECT TOP 10 medel FROM reagera where spelare = '" & session("namn") & "' order by medel asc

Senaste 10 spel

select top 10 spelare, medel from reagera order by tid desc

Top 10 spelare
Den har jag problem med då... Det blir inte rätt då med aasahs senaste förslag heller... Den skall alltså plocka 10 st. Nämligen sorterat från lägsta medel och uppåt. Och endast EN per spelare. Till skillnad från Topp 10 tider.

LarsGMedlem sedan dec. 200012 464 inlägg
#8

Vad har du för index på tabellen?

JonasGMedlem sedan mars 2001148 inlägg
#9

Hm...
Det vet jag inte. Har inte gjort något speciellt. Vet inte vad index är. Vad är det ... ? :-)

LarsGMedlem sedan dec. 200012 464 inlägg
#10

Index är till för att snabba upp sökningar. Det innebär att man skapar en sorterad kopia av vissa kolumner. T.ex. om du skapar ett index på spelarnam och poäng så borde det gå väldigt snabbt att hita bästa poängen för en viss spelare.

JonasGMedlem sedan mars 2001148 inlägg
#11

Thanks!

Med tidigare förslag om vilken att använda, samt användning av indexering på spelare och medel, går det riktigt snabbt nu!

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)