Avatar billede ralf_l Nybegynder
19. august 2013 - 01:01 Der er 15 kommentarer og
1 løsning

Søger hjælp til et spørgsmål og efterfølgende opgave

Jeg er kommet i en lidt spændende situation, på et kedeligt grundlag.

Jeg spiller et computerspil sammen med en masse andre herlige mennesker. Vi har en hjemmeside som ikke er helt tidssvarende. Desværre mistede vi for kort tid siden vores Webmaster på tragisk vis til en dum sygdom.

Inden hans død havde jeg fået adgang til vores server og database, da han ville have min hjælp og lære mig op, til at kunne arbejde med siden. Nu står jeg så bare alene om det. Et spændende projekt som jeg er begyndt på. Jeg tager en ting ad gangen og er startet fra bunden.

Jeg har dog fået en haste sag, som jeg gerne vil have meget hjælp til at lave. Men jeg har først et spørgsmål.

I forbindelse med opgaven, har vi en tabel i databasen, der består af en masse data for hver spillers spil igennem flere sæsoner. Den ser ud nogenlunde som følgende:
id - playerid - teamid - kills - assist - bombspla - bombsdef - flag - ...mm... - game - season

Men der er rigtigt mange rækker, der er ca 50.000.
Vil det ikke være smartere at dele den op i flere tabeller, så der er en tabel for hver sæson?


OPGAVEN:
Jeg skal lave en lidt avanceret point liste.

For at forstå point, fungere det på en lidt speciel måde:
Man får point pr game og for forskellige ting, fx 4 point for 10 kills, 4 point for 25 assist og 5 point for en bombspla.

Det vil sige at hvis en spiller i game1 har 14 kills, får han 4 point (ingen decimaler). Hvis han i game2 har 24 kills får han 8 point og har dermed ialt 12 point lige ud, igen ingen decimaler.

Jeg vil nu gerne have lavet en liste for sæson nummer 10 hvor den med flest point står øverst:

SPILER - SÆSON10
spiller1 - 1. XX POINT
spiller5 - 2. YY POINT
spiller2 - 3. ZZ POINT

i en kolone ved siden af, vil jeg gerne have en liste med
pointene og placeringen i sæson 9:

SPILLER - SÆSON10 - SÆSON9
spiller1 - 1. XX POINT - 3. WW POINT
spiller5 - 2. YY POINT - 1. VV POINT
spiller2 - 3. ZZ POINT - 5. UU POINT

Det vil jeg gerne have lavet for fx 5 runder.
Hvis så spilleren kun har været med i 4 skal der bare være streger:

SPILLER - SÆSON10 - SÆSON9 - SÆSON8
spiller1 - 1. XX POINT - 3. WW POINT - 2. SS Point
spiller5 - 2. YY POINT - 1. VV POINT - --------
spiller2 - 3. ZZ POINT - 5. UU POINT - 3. TT Point


Der ud over vil jeg gerne have farvet teksten grøn eller rød alt efter om de har gjort det bedre eller ringere end sæsonen før.
Fx spiller1 skal have en grøn tekst i sæson10 og rød i sæson9
spiller2 skal have rød i sæson10 og grøn i sæson9.
Hvis pladens er den samme, skal teksten bare være sort.


Jeg håber min beskrivelse er forståelig.


Hvilke problemer har jeg i forbindelse med at lave det her:
1. Grundet pointsystemet, skal pointene udregnes og ligges sammen game for game, og kan ikke bare ligges sammen for sæsonen. Det ved jeg ikke lige hvordan jeg kan gøre, og der er 24 games pr sæson.

2. Jeg kan godt lave en liste for sæson10, men jeg ved ikke hvordan jeg får sæson 9 i næste kolonne, og hvordan jeg får den til at finde ud af, hvad nummer spilleren var i den sæson.

3. Jeg er i forholdsvis stor tidsnød, så stik imod min egen politik, vil jeg spørger om der er en venlig sjæl, der kan lave en skabelon af  sådan et script for mig.

På forhånd tak for jeres opmærksomhed, og forhåbentlig også jeres evt hjælp.
Avatar billede repox Seniormester
19. august 2013 - 07:05 #1
Nej, det ville ikke være smartere at oprette tabeller for hver sæson der er spillet. 50.000 entries er forsvindende lidt data og ved at dele det op, mister du hele fordelen ved at have tingene i en database.

Der er for lidt information om din tabel og indholdet i den til at vi kan hjælpe dig.
Avatar billede ralf_l Nybegynder
19. august 2013 - 12:15 #2
Hej Repox, tak for svaret. Jeg troede at det ville være nemmere med det opdelt, så der var mindre data scriptet skulle bladre igennem.


Tabellen hedder 'gamesdata'

Når en bruger har spillet et spil, bliver hans (playerid) lagt ind i tabellen og spillets id langt ind under cellen game.

Tabellen indholder har nok 20 ting der giver point. Jeg tænkte at for at lave lidt og lære lidt selv, så ham/hende der hjalp, bare lave 3 af dem (de 3 jeg gav som eksempel). Så kunne jeg selv lave resten, og muligvis lære lidt på den måde.

Det samme med antallet af sæsoner. Hvis der bare kan laves for de første 3 sæsoner (season 10, 9 og 8), så kan jeg selv lære lidt ved at skrive de sidste 2 sæsoner (7 og 6).

Playerid, game, season og alle de celler der giver point er af typen 'int'.

Er der andre oplysninger i gerne vil have, så skriver jeg dem gerne. :)
Avatar billede repox Seniormester
19. august 2013 - 12:55 #3
Der er ikke rigtig noget formål i at begrænse opgaven til x antal sæsoner da det - alt andet lige - bare er den samme stump kode der skal genbruges for hver sæson.

Der er også en konflikt i det du ønsker dig.
Du vil gerne have spiller rangeret i en tabel sorteret efter score vertikalt og sorteret efter sæson horisontalt. Og så vil du også vise det baseret på antal kampe man har deltaget i - men her mangler altså en dimension i forhold til tabellens muligheder. Hvordan vil du have det med?
Avatar billede repox Seniormester
19. august 2013 - 12:56 #4
Den er også helt galt med rangeringen på tværs af sæsonerne.
Du bliver nød til at gennemtænke hvad du vil vise frem og hvordan det kan lade sig gøre.
Avatar billede ralf_l Nybegynder
19. august 2013 - 13:02 #5
Hej Repox, igen tak for svaret.

Det med at selv at skulle skrive det, er også mere for at selv skrive lidt, jeg lære bedst ved at lade det gå igennem mit hovedet, ned i hånden og ud på et papir/eller i et dokument på computeren. Så hvis jeg læser mig igennem koderne og selv skriver dem ned/af, har jeg bedre ved at forstå dem. Det er sådan set bare derfor.

Jeg havde ikke planer om at lave noget med hvor mange spil de har spillet. Bare den totale score i løbet af en sæson.
Avatar billede ralf_l Nybegynder
19. august 2013 - 13:04 #6
Repox, hvorfor er jeg gal med rangeringen. Det er meningen at den skal vise rangeringen for den sidste sæson (sæson 10), og derefter hvordan hans udvikling har været over de sidste 5 sæsoner.
Avatar billede repox Seniormester
19. august 2013 - 13:08 #7
Du skriver selv at:

Det vil jeg gerne have lavet for fx 5 runder.
Hvis så spilleren kun har været med i 4 skal der bare være streger:

SPILLER - SÆSON10 - SÆSON9 - SÆSON8
spiller1 - 1. XX POINT - 3. WW POINT - 2. SS Point
spiller5 - 2. YY POINT - 1. VV POINT - --------
spiller2 - 3. ZZ POINT - 5. UU POINT - 3. TT Point


Med runder, mener du så sæsoner?
Avatar billede ralf_l Nybegynder
19. august 2013 - 13:13 #8
Ja, ups undskyld, det var min fejl, der skulle stå sæsoner. Den beklager jeg. Håber det så giver mere mening.
Avatar billede repox Seniormester
19. august 2013 - 14:47 #9
Der er en del der ville have været en del lettere med en smule databasenormalisering, from for at samle alt i en tabel, men jeg har brygget noget sammen som giver en snært af en fornemmelse af hvad det er du skal ud i.

http://pastebin.com/MCAtMy9P
Avatar billede ralf_l Nybegynder
19. august 2013 - 15:22 #10
Ser rigtigt godt ud, det fylder en del mindre end jeg regnede med.
Jeg kigger lige lidt mere på det om 1 times tid når jeg er kommet hjem.

Hvordan mener du at jeg skal lave databasenormalisering?
Avatar billede ralf_l Nybegynder
19. august 2013 - 20:02 #11
Nå fik lige uventet besøg da jeg kom hjem.
Tak for den indtil videre gode og hurtige service.

Jeg har kigget på det, ikke fået det til at køre, men jeg starter lige med at se om jeg forstår koderne, og hvad de gør.

Jeg kan nogenlunde se og forstå det grundlæggende i det, jeg har dog 2 spørgsmål, som jeg ikke lige kan lure svaret til.

1. Jeg har lidt problemer med at se hvor min connection til databasen og tabellen skal indsættes.

2. Er det i linje 9-27 jeg kan lave point beregningen?
Altså fx så jeg deler kills med 10 afrunder og ganger med 4?
Avatar billede ralf_l Nybegynder
21. august 2013 - 10:58 #12
2 (tillæg). Jeg tænkte lidt på, om det var bedre at have de udregnet point langt ind i databasen. På den måde skal der ikke regnes så meget ud når de trækkes ud af databasen?
Avatar billede cronaldo Nybegynder
23. august 2013 - 01:32 #13
Ralf_l: Nej, din udregning tager ingen tid. Normalt er det, der "sinker" et website og gør det tungt at køre foreach-loops, for-loops og database-kald. Når det er helt galt er det disse tre i forening.

Selve udregningen bør ikke være et problem for dig. MEDMINDRE du pludseligt har 1.000 sæsoner, som du skal vise på én gang, men du bør jo gøre, så man vælger hvilken sæson, man vil se osv.. :)
Avatar billede ralf_l Nybegynder
28. august 2013 - 11:40 #14
Jeg lukker lige dette spørgsmål, jeg skulle bruge det til den netop overstået weekenden.

Jeg fandt selv en primitiv og ikke særlig god måde at gøre det på, så nu vil jeg koncentrer mig om at tage en ting af gangen og lære på den måde.

Ellers tak for din fine hjælp Repox.
Avatar billede ralf_l Nybegynder
28. august 2013 - 11:40 #15
Lukker
Avatar billede ralf_l Nybegynder
05. september 2013 - 21:53 #16
Hej Cronaldo og repox.

Jeg er meget taknemlig for at i vil hjælpe, og det er ikke sidste gang jeg vil spørger om hjælp. Jeg sætter meget pris på at i giver jer tid og har lyst til at hjælpe os der er knap så gode.

Jeg er ked af, at jeg lukkede dette spørgsmål uden at tildele jer point.
Jeg er blevet gjort bekendt med, at det var forkert af mig, at selv lukke dette spørgsmål. Derfor vil jeg gerne hvis i vil skrive, hvis i vil have pointene.

Grunden til lukningen var som sagt, at jeg ikke længede havde brug for svaret. Jeg fandt selv en primitiv måde at gøre det på. På samme tid var der gået 5 dage uden svar på mit hovedspørgsmål, og jeg mente derfor at det var gået lidt dødt.

Jeg er ked af hvis jeg har trådt på nogen i forbindelse med lukningen. Det har ikke været min mening.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester