Avatar billede sungdk Nybegynder
04. april 2005 - 20:56 Der er 10 kommentarer og
1 løsning

Rangliste fra MYSQL

Hej med jer!

Er lidt tabt i hvordan dette skal gøres. Jeg forklarer...

Jeg har en DB med en tabel som fx indeholder: id, Bruger, bruger2, vinder.

Jeg skal have lavet en rangliste over de brugere som står flest gange i "vinder", og så skal det selvfølgelig udskrives. Evt. Limit 20.

Nogle som har en metode til dette? Jeg tænkte selv på sum(), men den lægger jo vidst bare tallet sammen.

Og husk at i vinder, står et tal (brugerens id fra en anden tabel).

På forhånd tak eksperter...
Avatar billede busschou Praktikant
04. april 2005 - 21:04 #1
puha..ligefør jeg ville tro det var nemmere at lave en sideløbende tabel med felterne id,bruger,antalVundet ... og så opdatere antalVundet hver gang en bruger vinder
Men det er bare en ide
Avatar billede bromer Nybegynder
04. april 2005 - 21:10 #2
kan du ikke lave en

$rs = mysql_query("select vinder,count(1) as antal_vundet FROM mytable GROUP BY vinder ORDER by antal_vundet DESC,vinder ASC LIMIT 20");
while($row = mysql_fetch_row($rs)) {
printf("Vinder %s har vundet %d gange<br/>",$row['vinder'],$row['antal_vundet']);
}
Avatar billede busschou Praktikant
04. april 2005 - 21:15 #3
bromer >> count(1) vil det bare tælle vinder op? .. jeg troede kun en count kunne bruges på en kolonne i databasen?
Avatar billede bromer Nybegynder
04. april 2005 - 21:22 #4
Ikke når du laver en group by. Så vil den tælle antallet af rækker der har samme vinder felt. Det kræver så at du har et bruger-id eller brugernavn i vinder feltet.

Ellers må du gerne forklare lidt mere om, hvordan du bruger din tabel. Hvad smider du vinderfeltet og hvorfor er der 2 bruger-felter i tabellen?
Avatar billede sungdk Nybegynder
04. april 2005 - 21:23 #5
Det virker sådan nogenlunde efter hensigen.

Jeg forstår bare ikke hvorfor at nogle af vinderne (altså deres id) optræder flere gange på top 20 listen?
Avatar billede sungdk Nybegynder
04. april 2005 - 21:25 #6
bromer >> Det er en tabel over kampe imellem to brugere.

Bruger1 er udfordreren, og Bruger2 er modstanderen/modtageren.

Der står ikke et brugernavn i dem, men deres id. Når kampen har fundet sted, så har vi en vinder. Og han bliver UPDATE i vinder-feltet med hans id.

Og nu vil jeg lave en rangliste over dem som har vundet flest gange.
Avatar billede bromer Nybegynder
04. april 2005 - 21:27 #7
okay.. se så blev strukturen meget mere klar.

Er du helt sikker på at min query giver samme id i vinder-feltet? Det er jeg ret overbevist om at den ikke gør.
Avatar billede sungdk Nybegynder
04. april 2005 - 21:30 #8
Tjekker lige igen :D
Avatar billede sungdk Nybegynder
04. april 2005 - 21:34 #9
Nej det var mig som havde lavet en bommert!

Opret svar! :D

Lige en lille sidste ting. Kan du evt. give en forklaring på at 2 af placeringerne ikke har en vinder? Men ligger alligevel top20 ;/
Avatar billede bromer Nybegynder
04. april 2005 - 21:37 #10
Det har vel noget af gøre med hvor meget data du har i databasen. Hvis der kun er 18 vindere vil der være to som kommer på toplisten med 0 vundre kampe. Det kan du vel ordne med følgende:


$rs = mysql_query("select vinder,count(1) as antal_vundet FROM mytable GROUP BY vinder HAVING antal_vundet > 0 ORDER by antal_vundet DESC,vinder ASC LIMIT 20");
while($row = mysql_fetch_row($rs)) {
printf("Vinder %s har vundet %d gange<br/>",$row['vinder'],$row['antal_vundet']);
}
Avatar billede bromer Nybegynder
04. april 2005 - 21:42 #11
tak for point. Bortset fra det så handlede dit sprøgsmål kun om hvordan du skabte en query der fik mysql til at retunrere et ønsket resultatsæt, så du kunne med fordel have oprettet det i MySQL kategorien.
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