Avatar billede madsens90 Praktikant
07. juli 2009 - 13:33 Der er 11 kommentarer og
1 løsning

Top 3 over største hyppighed af tal i database?

Overskriften forklarer næsten mit spørgsmål.

Mangler et PHP script der kigger i en tabel i min MySQL DB, og finder de rækker som har samme tal flest gange.

fx hvis tabellen så sådan ud:

id | tal
1    4
2    5
3    3
4    4
5    4
6    3
7    1

Så ville min top 3 se sådan ud:

1 = 4
2 = 3
3 = 1, eller 5

Håber i forstår. ! :)
Tak for hjælpen allerede!
Avatar billede kdasummer Nybegynder
07. juli 2009 - 14:01 #1
jeg forestiller mig et script der kører igennem alle tal i tabellen igennem, for så at køre alle tal igennem igen hvor tallene sammenlignes og resultatet bliver gemt i en array... men det bliver hurtigt resursekrævende hvis tabellen er meget lang.

er lidt spændt på at se om folk har andre idéer, ellers kan jeg måske godt smække noget kode sammen.
Avatar billede madsens90 Praktikant
07. juli 2009 - 14:09 #2
jah, jeg tænkte også på det med en array, men er ikke helt inde i arrays.
Men man kunne selvfølgelig godt sætte hver række ind i et array, og så mindes jeg der er en funktion til at tjekke efter hyppighed af et tal i et array.

Er også selv spændt på at se hvad folk har af idéer. ;)

Laver det for at skulle lave en top 3 over den der er i databasen flest gange..

Det er jo ikke helt så simpelt som at se efter hvor mange gange ét tal er i tabellen. ;)
Avatar billede kdasummer Nybegynder
07. juli 2009 - 14:22 #3
jeg ville ikke sætte hver række i en array.. mere noget i stil af:

talForekomsterArray = array()

for (index = 0;index < DBRækker.Antal;index++) {
  nummer = DBRækker.Række[index].Felt["tal"]
  antalForekomster = 0
  ---KODE HER DER SØGER talForekomsterArray igennem for, om nuværende tal allerede er talt!!! ---
  for(andetIndex = 0;andetIndex < DBRækker.Antal;andetIndex++) {
    if(DBRækker.Række[andetIndex] == nummer) {
      antalForekomster++
    }
  }
  talForekomsterArray[index] = antalForekomster
}

men jeg ved ikke om det er den smarteste løsning...
Avatar billede madsens90 Praktikant
07. juli 2009 - 14:32 #4
Sidder selv og prøver at finde på en smartere løsning. Men det er ihvertfald nok noget med en for løkke, og måske arrays.
Avatar billede majbom Novice
07. juli 2009 - 15:34 #5
hvad med:

"SELECT tal, COUNT(id) AS mycount FROM tabel GROUP BY tal ORDER BY mycount DESC LIMIT 3"

?
Avatar billede majbom Novice
07. juli 2009 - 15:37 #6
og så:

$i = 0;
        while($row = mysql_fetch_assoc($res)){
            $i++;
            echo $i.": ".$row['tal']."<br>";
        }

efterfølgende...
Avatar billede madsens90 Praktikant
08. juli 2009 - 09:58 #7
splazz!! Det virker præcis som det skal, og det er virkelig overskueligt! :)
Vidste der var en nemmere metode end at skulle til at rode sig ud i arrays osv. :D kom med et svar! :)

kdasummer:
Tak for hjælpen alligevel! :)

endelige kode hvis nogen vil se det:

          $sql = "SELECT spiller, COUNT(id) AS mycount FROM hil_kampe GROUP BY spiller ORDER BY mycount DESC LIMIT 3";
          $res = mysql_query($sql);
          $i = 0;
        while($row = mysql_fetch_assoc($res)){

$query2 = mysql_query("SELECT navn AS namer FROM hil_users WHERE id = $row[spiller]");
$namers = @mysql_fetch_assoc($query2);

            $i++;
            echo "<span id=sort>$i.</span> $namers[namer]<br>";
        }
Avatar billede majbom Novice
08. juli 2009 - 10:18 #8
kommer her :)
Avatar billede majbom Novice
08. juli 2009 - 10:55 #9
tak for point
Avatar billede kdasummer Nybegynder
08. juli 2009 - 11:04 #10
dejligt når man også lærer noget nyt af det her.. både mere overskuelig kode og 1000 gange hurtigere. fedt splazz!!
Avatar billede madsens90 Praktikant
08. juli 2009 - 11:09 #11
Præcis kdasummer!
Var lige sådan en kode jeg ville frem til! :)
Avatar billede majbom Novice
08. juli 2009 - 11:20 #12
hehe ja, lærte faktisk også selv noget, da jeg var nødt til at søge lidt på nettet og prøve mig frem inden det lykkedes :)
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