Lite osäker på om detta går att åstadkomma med en SQL-fråga eller om jag måste introducera skriptande.
Jag har ett gäng olika topplistor definierade i highscore_types med fälten type, form och handed. Type bestämmer ensamt en rad i tabellen. Själva rekorden ligger i tabellen highscore med fälten uname, type, value och timestamp. uname säger vem som slagit rekord, type anger vilken topplista och value är rekordet.
Nu skulle jag vilja få ut en "Overall"-topplista där poängfördelningen ser ut som följer:
1: 16p
2: 12p
3: 10p
4: 8p
5: 5p
Svarstabellen ska innehålla uname och poäng. Alternativt, om det är mycket enklare, uname samt antal 1a-, 2a-, 3e-, 4e- och 5e-placeringar.
Kan man göra en sådan utsökning eller måste jag skripta detta? Om det går med SQL, hur ser frågan ut?
(Det gäller MySQL)
Det finns en hel del topplistor och vilken placering man har i topplistan ska avgöra hur mycket poäng man får.
Säg att jag ligger 1:a, 3:a och 3:a (och att det bara finns tre topplistor) då ska jag få
1*16 + 2*10 = 36p.
Value är bara vilket rekord man har i just den topplistan och utifrån den ska man alltså sortera tabellen för att komma fram till placeringarna. Value innehåller ingen poäng, eftersom poängen är tänkt att räknas fram.
select uname,sum(points) pnts
from
(select uname,
case
(select count(*)
from high_score
where value > hs.value
and type = hs.type
and uname <> hs.uname)
when 0 then 16
when 1 then 10
else 0 end) pnts
from highscore hs) dt
select uname,sum(points) pnts
from
(select uname,
case
(select count(*)
from high_score
where value > hs.value
and type = hs.type
and uname <> hs.uname)
when 0 then 16
when 1 then 10
else 0 end) pnts
from highscore hs) dt
Tack för hjälpen.
260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e