Avatar billede daddy Novice
02. juni 2005 - 15:11 Der er 4 kommentarer og
1 løsning

Hvordan udtrækker man alle og vælger de 10 bedste?

Jeg leger lidt med et tipssystem, men sidder lidt fast på grund af mine begrænsede evner. Tror det er ret let når man lige ved hvordan ;-)

Håber at et af jer kloge hovder kan hjælpe mig.

Jeg har en MySql database med en række tabeller. Her er vist det nødvendige fra dem.

Tabelnavn: users
Feltnavn: username

Dette er en "hovedtabel" hvor alle brugernaven er lageret.

Der udover er der x antal tabeller som er ens. Én for hver runde i turneringen. De ser således ud.

Tabelnavn: runde10
Feltnavn: user (svare til username i hovedtabellen)
Feltnavn: total.

Det jeg så har brug for, er et script som løber alle brugere igennem fra "users" og tjekker hvor runde tabel for om der er en forekomst på den enkelte bruger.

Så skal den tage alle de "total" den finder på en bruger. F.eks 14. Der skal den så "vælge" de 10 som har den højeste værdi og ligge dem sammen til et samlet tal, som så kan fremvises. Det skal også gerne være muligt at se "total" fra de enkelte runder.

Antal af runder og hvor mange der skal tages med i beregningen (10) skal meget gerne være nemme at rette til et andet antal.

Jeg har prøvet med den måde jeg kan lave udtræk på, men det slår slet ikke til for at få lavet dette.

Er min forklaring for vrøvlet, så spørg endelig.

Smider 200 point, da jeg jo nærmst har brug for et færdig script. Skal der flere til så prøv at skriv.
Avatar billede coderdk Praktikant
02. juni 2005 - 15:16 #1
Det lyder ikke som om din datamodel er særligt god - En masse redundant data osv, jeg ville lave den helt om:

USERS
-----
userid
username

ROUNDS
======
id int auto_increment
roundnumber
userid
total

Så bruger du kun to tabeller, der er meget nemme at arbejde med, så kan man lave queries som:

SELECT u.username, SUM(r.total) AS samlet FROM users u INNER JOIN rounds r ON u.userid = r.userid GROUP BY u.userid ORDER BY samlet LIMIT 10

Så skulle du gerne få de data som du vil have ;)
Avatar billede coderdk Praktikant
02. juni 2005 - 15:17 #2
Hov, query'en skulle være:

SELECT u.username, SUM(r.total) AS samlet FROM users u INNER JOIN rounds r ON u.userid = r.userid AND r.roundnumber = 10 GROUP BY u.userid ORDER BY samlet LIMIT 10

Her er det runde 10 der bliver filtereret på!
Avatar billede daddy Novice
02. juni 2005 - 15:23 #3
Ja det er ikke det smarteste datamodel, men da jeg allerede har systemet oppe og køre, bortset fra det jeg mangler her. Så kan jeg ikke lave det om lige nu, da vi er midt en turnering. Men når jeg engang får tid vil jeg også gerne have det hele lavet om.
Avatar billede coderdk Praktikant
11. juni 2005 - 19:11 #4
Det burde nu kunne lade sig gøre at konvertere de eksisterende data til den nye struktur ;P
Avatar billede daddy Novice
17. april 2011 - 21:20 #5
lukket
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