Avatar billede jakobdo Ekspert
10. februar 2005 - 17:10 Der er 7 kommentarer og
2 løsninger

Lave fodbold stats og smart udtræk

Hej,
jeg har kastet mig ud i at kode et system som skal køre statistik på fodbold kampe!

(bordfodbold)

Vinder får man 1 point.
Taber, mister man 1 point.
Vindes der 10-0 får man 2 point.
Tabes der 10-0 mister man 2 point.

Jeg har forsøgt at bygge min database sådan:

spillere:
spiller_id, spillernavn, point

kampe:
kamp_id, redSpiller, blueSpiller, redResult, blueResult

Er denne database struktur helt hen i vejret?

Jeg ønsker at få trukket stats ud på følgende måde:

spillernavn - sejre - nederlag - point
Der skal sorteres efter point.

Er mine tabeller helt forkert?
Eller kan man godt lave udtrækket smart?
Avatar billede arne_v Ekspert
10. februar 2005 - 17:14 #1
Tabel strukturen ser ganske fornuftig ud.

Men du får et problem med at få sejre og nederlag hevet ud. Det kan gøres men
det bliver grimt.

Det var langt nemmere hvis de også var felter i spillere tabellen.
Avatar billede plazm Nybegynder
10. februar 2005 - 17:24 #2
ja og når du alligevel henter point ud ved opdatering så kunne jo lige så godt også tage de to andre
Avatar billede kjulius Novice
10. februar 2005 - 17:46 #3
Jeg tror det kan gøres nogenlunde sådan her:

SELECT s.spillernavn, COUNT(v.*) AS sejre, COUNT(t.*) AS nederlag, s.point
FROM spillere s
LEFT JOIN kampe v
    ON (s.spiller_id = v.redspiller AND v.redResultat > v.blueResultat) OR
        s.spiller_id = v.bluespiller AND v.blueResultat > v.redResultat)
LEFT JOIN kampe t
    ON (s.spiller_id = t.redspiller AND t.redResultat < t.blueResultat) OR
        s.spiller_id = t.bluespiller AND t.blueResultat < t.redResultat)
GROUP BY s.spillernavn, s.point
ORDER BY s.spillernavn

Jeg må dog skynde mig at sige, at jeg ikke kender ret meget til MySQL og dennes muligheder. Men teoretisk burde det kunne lade sig gøre på den måde.
Avatar billede kjulius Novice
10. februar 2005 - 17:50 #4
Så var jeg vist igen lidt hurtigt ude. Der mangler et par paranteser:

SELECT s.spillernavn, COUNT(v.*) AS sejre, COUNT(t.*) AS nederlag, s.point
FROM spillere s
LEFT JOIN kampe v
    ON (s.spiller_id = v.redspiller AND v.redResultat > v.blueResultat) OR
      (s.spiller_id = v.bluespiller AND v.blueResultat > v.redResultat)
LEFT JOIN kampe t
    ON (s.spiller_id = t.redspiller AND t.redResultat < t.blueResultat) OR
      (s.spiller_id = t.bluespiller AND t.blueResultat < t.redResultat)
GROUP BY s.spillernavn, s.point
ORDER BY s.spillernavn
Avatar billede jakobdo Ekspert
10. februar 2005 - 21:25 #5
Kjulius,
Din løsning giver fejlen:
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS sejre,
    COUNT(t.*) AS nederlag,
    s.point
FROM
    spi

Tror dog jeg vil lave det på denne måde:

Udvide spillere tabellen til:

spiller_id, spillernavn, point, sejre, nederlag
Avatar billede jakobdo Ekspert
10. februar 2005 - 21:46 #6
Hej Arne,
jeg havde selv tænkt din tanke!
Men ville bare høre om det var en mulighed at gøre det via ren SQL!
Men smid et svar! Så kan i dele point!
Avatar billede arne_v Ekspert
10. februar 2005 - 21:46 #7
svar
Avatar billede kjulius Novice
11. februar 2005 - 14:17 #8
Tak for point. :-) Men helt ærligt, så har jeg jo ikke fortjent dem, da mit løsningsforslag ikke duede og gav fejl. :o]
Avatar billede jakobdo Ekspert
11. februar 2005 - 14:19 #9
Nej, men du gav det et forsøg!
Og eftersom den ide Arne_V kom med allerede var havnet i mit hoved inden Arne_V kom med den, så hjalp han jo heller ikke!
Men man får jo altid noget input, så derfor synes jeg pointene er jeres!
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
Computerworld tilbyder specialiserede kurser i database-management

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