Avatar billede michaeltryl Seniormester
19. oktober 2006 - 14:56 Der 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
Avatar billede jaw Nybegynder
19. oktober 2006 - 15:00 #1
Måske:

SELECT COUNT(*) as antal FROM tabel GROUP BY korrekt ORDER BY korrekt, antal DESC LIMIT 3

?
Avatar billede jaw Nybegynder
19. oktober 2006 - 15:02 #2
Måske korrekt bliver ASC i ovenstående, så måske:
SELECT COUNT(*) as antal FROM tabel GROUP BY korrekt ORDER BY korrekt DESC, antal DESC LIMIT 3
Avatar billede michaeltryl Seniormester
19. oktober 2006 - 15:14 #3
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'];

echo"$bruger - $korrekt<br>";
}
Avatar billede sw_red_6 Nybegynder
19. oktober 2006 - 15:15 #4
der er fordi du ikke henter bruger og korrekt ud af databasen, men kun antallet. prøv at tilføje bruger og korrekt efter count(*)
Avatar billede jaw Nybegynder
19. oktober 2006 - 15:47 #5
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.
Avatar billede michaeltryl Seniormester
19. oktober 2006 - 16:16 #6
$id = $_GET[id];

$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
Avatar billede jaw Nybegynder
19. oktober 2006 - 18:43 #7
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'];

echo $antal ." brugere har svaret rigtigt p&aring; ".$korrekt." sp&oslash;rgsm&aring;l<br />";
}
Avatar billede jaw Nybegynder
19. oktober 2006 - 18:44 #8
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...
Avatar billede michaeltryl Seniormester
19. oktober 2006 - 19:08 #9
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.
Avatar billede jaw Nybegynder
19. oktober 2006 - 19:18 #10
Okey, så prøver vi noget nyt.

Ved ikke om det er den mest elegante løsning, men tror den virker (er lidt træt!):

$vinder = mysql_query("SELECT bruger, korrekt FROM konku_deltag WHERE konkuid ='$id' ORDER BY korrekt DESC") or die(mysql_error());
$i = 0;
$kor = 0;
while ($a = mysql_fetch_assoc($vinder))
{
    $bruger = $a['bruger'];
  $korrekt = $a['korrekt'];
    if($korrekt != $kor) {
        $i++;
        $kor = $korrekt;
    }
    if($i == 4) {
        break;
    }

echo $bruger ." - har svaret rigtigt p&aring; ".$korrekt." sp&oslash;rgsm&aring;l<br />";

}
Avatar billede michaeltryl Seniormester
19. oktober 2006 - 19:23 #11
ja det ser fint ud, men jeg ville godt have sådan at det er 3 seperate lister hvis det kan lade sig gøre
Avatar billede jaw Nybegynder
19. oktober 2006 - 19:28 #12
Her så måske:

$vinder = mysql_query("SELECT bruger, korrekt FROM konku_deltag WHERE konkuid ='$id' ORDER BY korrekt DESC") or die(mysql_error());
$i = 0;
$kor = 0;
while ($a = mysql_fetch_assoc($vinder))
{
    $bruger = $a['bruger'];
  $korrekt = $a['korrekt'];
    if($korrekt != $kor) {
        $i++;
        $kor = $korrekt;
        if($i == 4) {
            break;
        }
        echo "Brugere der har svaret rigtigt p&aring; ".$korrekt." sp&oslash;rgsm&aring;l<br />";
    }

echo " - ".$bruger."<br />";
}
Avatar billede michaeltryl Seniormester
19. oktober 2006 - 19:59 #13
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
Avatar billede jaw Nybegynder
19. oktober 2006 - 20:22 #14
Ok, selv tak :)
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger Entreprise Arkitekt

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst