Sortér efter performance

Tags:    php mysql sql

Kære udviklere,

Nu ligger landet sådan at jeg er ved at bygge et League of Legends website. Dette website skal bruges til at slå en summoner op, tjekke stats, aktive games og meget mere.

Jeg er så stødt ind i et SQL problem. Egentlig ikke et problem med selve SQL'en, men selve forståelsen for hvad jeg egentlig gerne vil sortére efter.

Jeg benytter mig af Riot Games API'et, hvilket er totalt irrelevant for jer.

Min tabel `championPerformances` ser således ud

-------------------------
| championPerformance ID |
| fk_summoner_id |
| fk_champion_id |
| totalChampionKills |
| totalAssists |
| totalDeathsPerSession |
| totalSessionsPlayed |
| totalSessionsLost |
| totalSessionsWon |
-------------------------

Det er ret sigende hvilket slags data jeg får ind, så det går jeg ikke mere ind i.

Basicly så handler det bare om at jeg looper igennem API'et, og finder hver champion der er spillet af den summoner/spiller som man besøger på nuværende tidspunkt.

Problemstilling:
Jeg vil gerne sortére efter performance for den enkelte champion. Dvs. jeg dividerer `totalSessionsWon` med `totalSessionsPlayed` og ganger med 100 for at få procent. Dog er det ikke helt det jeg vil. For hvis vi f.eks. siger at der er en champion der er spillet 1 gang, og har vundet det game, så kommer performance til at være 100%. Dog hvis en champion har spillet 74 games (49 wins og 25 losses) er performance 66,2%.

Hvad jeg gerne vil have:
Hvis vi tager overstående eksempel, vil jeg gerne have at den champion med flest games spillet kommer før den champion med 100% performance.

Eksempel på hvad jeg har nu: Billede

Som man kan se står 'Bard' over 'Vayne', hvor jeg gerne vil have 'Vayne' til at stå øverst.

Her har vi et andet site der har gjort det rigtigt - og med samme data som jeg har: Link

Jeg håber at I kan følge mit problem, og evt. give et skud på hvad der skal gøres.

Min nuværende SQL for udskrivningen:
Fold kodeboks ind/udSQL kode 


Egentlig er det bare et SQL problem



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hej Daniele

Jeg synes du bør vægte performancescoren for de brugere, der har under fx 50 games.

Så har man under 50 games, så ganges scoren med fx (antal_games / 50)

performance for dem under 50 kampe:
`totalSessionsWon` / `totalSessionsPlayed` * (totalSessionsPlayed / 50) * 100

performance for dem over 50 kampe:
`totalSessionsWon` / `totalSessionsPlayed` * 100




Indlæg senest redigeret d. 25.11.2015 13:07 af Bruger #4879
Hej Kristian,

Tak for dit svar! Jeg afprøver det lige når jeg er færdig med min matematik opgave. Jeg redigerer bare i denne besvarelse når jeg har prøvet :)

Update 25/11/2015 16:06
Det virker! Dog skal jeg lige have ændret lidt hist og her, men det virker! Har sat forskellen til 30 i stedet for 50.

Fold kodeboks ind/udSQL kode 




Indlæg senest redigeret d. 25.11.2015 16:08 af Bruger #16025
Ud fra din ovenstående udtalelse:

"Hvis vi tager overstående eksempel, vil jeg gerne have at den champion med flest games spillet kommer før den champion med 100% performance."

... så ville mit forslag være først at sortere efter "skillScore", og derefter efter "winRatio", så din indledende SQL kommer til at slutte således:

Fold kodeboks ind/udSQL kode 


Hvis to champions har det samme antal spil, så vil den med den største winRatio komme først.



t