19. oktober 2006 - 14:56Der er
13 kommentarer og 1 løsning
finde største, næst største og tredje største tal i en databse
jeg er ved at lave et konkurrence system i php jeg er kommet dertil at jeg skal have listet alle dem op som har svaret rigtigt på flest næst flest næst næst flest f.eks. 2 brugere har svaret rigtigt på 5 spørgsmål 1 brugere har svaret rigtigt på 3 spørgsmål 5 brugere har svaret rigtigt på 2 spørgsmål 10 brugere har svaret rigtigt på 1 spørgsmål
så skal jeg have en liste som lister alle dem der har svaret rigtigt på 5 en anden liste med dem der har svaret rigtigt på 3 og en liste på dem der har svaret rigtigt på 2 spørgsmål.
Kan dette lade sig gøre og i så fald hvordan? Brugernes antal rigtige svar ligger i feltet "korrekt" i databsen
der bliver kun udskrevet tre bindestreger. jeg har følgende
$id = $_GET[id]; $vinder = mysql_query("SELECT COUNT(*) as antal FROM konku_deltag WHERE konkuid ='$id' GROUP BY korrekt ORDER BY korrekt, antal DESC LIMIT 3") or die(mysql_error()); while ($a = mysql_fetch_assoc($vinder)) { $bruger = $a['bruger']; $korrekt = $a['korrekt'];
Hvad vil du med bruger da? Er det ikke brugernavnet? Muligvis skal du, som sw_red_6 angiver, tilføje korrekt i hvert fald. Men det er jo så "korrekt" og "antal" du skal udskrive.
$vinder = mysql_query("SELECT COUNT(*) as antal, bruger, korrekt FROM konku_deltag WHERE konkuid ='$id' GROUP BY korrekt ORDER BY korrekt, antal DESC LIMIT 3") or die(mysql_error()); while ($a = mysql_fetch_assoc($vinder)) { $bruger = $a['bruger']; $korrekt = $a['korrekt'];
echo"$bruger - $korrekt<br>";
giver samme resultat med DESC og ASC og den henter ikke det rigtige. databasen ser sådan ud
deltagid | bruger | konkuid | korrekt -------------------------------- 9 | michael | 1 | 2 10 | magiske | 1 | 3 11 | web | 1 | 3 12 | test | 1 | 1 13 | test1 | 1 | 0 14 | test2 | 1 | 1 15 | test3 | 1 | 2 så resultatet burde se nogenlunde sådan her ud michael-2 magiske-3 web-3 test-1 test2-1 test3-2
men der udskrives dette test1 - 0 test - 1 michael - 2
I forhold til, hvad du angav i selve spørgsmålet, så giver følgende dig det rigtige:
$vinder = mysql_query("SELECT COUNT(*) as antal, korrekt FROM konku_deltag WHERE konkuid ='$id' GROUP BY korrekt ORDER BY korrekt DESC, antal DESC LIMIT 3") or die(mysql_error()); while ($a = mysql_fetch_assoc($vinder)) { $antal = $a['antal']; $korrekt = $a['korrekt'];
Hvis ikke må du omformulere. For i dit originale spørgsmål, har du ikke nogen steder angivet at den skal udskrive brugernavnet??
Mit ovenstående eksempel giver: 2 brugere har svaret rigtigt på 5 spørgsmål 1 brugere har svaret rigtigt på 3 spørgsmål 5 brugere har svaret rigtigt på 2 spørgsmål 10 brugere har svaret rigtigt på 1 spørgsmål ... som det nu står i din database selvfølgelig...
jeg kan gost se det ikke er den bedste formulering jeg lavede først. tager vi udgangsgangs punkt i dit eksempel: 2 brugere har svaret rigtigt på 5 spørgsmål 1 brugere har svaret rigtigt på 3 spørgsmål 5 brugere har svaret rigtigt på 2 spørgsmål 10 brugere har svaret rigtigt på 1 spørgsmål
skal der udskrives en liste med brugernavne på de to brugere der har svaret på 5 en liste med den bruger der har svaret på 3 og en liste på de 5 brugere der har svaret på 2 spørgsmål.
grunden til dette er at der skal tildeles point til disse brugere, så derfor har jeg behov for at kende brugernavnen.
jeps det virker smid et svar her så får du point og tak for hjælpen. jeg har oprettet et spørgsmål i forlængelse af dette. http://www.eksperten.dk/spm/739638 hvis du kan/vil hjælpe mere
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.