Avatar billede cschmalz Nybegynder
18. marts 2007 - 17:04 Der er 19 kommentarer og
2 løsninger

Sorter efter gennemsnit

Dette er en udbygning af et af mine andre spørgsmål da der var fejl i svaret på det andet, mit spørgsmål lød:

-------------------------------------------------------------

Hej! :D
Jeg har lavet et rating script hvor den bl.a. tilføjer total antal stemmer, og totale "rate".

Jeg vil så have en Top 5 over de højest ratede og det gør jeg således:

("SELECT * FROM hotornot ORDER BY stemmer,rate DESC LIMIT 5");

Altså den skal dividere rate med stemmer for at finde det gennemsnitlige rate.
Det fungere fint ligebortset fra at rækkefølgen bliver sådan her:

0
6
5
2

Når den skal være:

6
5
2
0
-------------------------------------------------------------

Og svaret var:
("SELECT * FROM hotornot ORDER BY stemmer DESC, rate DESC LIMIT 5");

Det virkede, men da jeg så stemte på den med 0 blev tingen i bunden så stillingen blev:

6
5
2
4

Håber i kan hjælpe!!!
På forhånd tak!

Mvh CschmalZ
- http://cschmalz.dk
Avatar billede hmm10 Nybegynder
18. marts 2007 - 18:02 #1
Hvordan ser dit script helt præcist ud?
Avatar billede cschmalz Nybegynder
18. marts 2007 - 18:08 #2
<?
    include "txt/txt-db-api.php";

    $db = new Database("hotnot");
    $result = $db->executeQuery("SELECT * FROM hotornot ORDER BY stemmer DESC, rate DESC LIMIT 5");
        while ($result->next()) {
    $data = $result->getCurrentValuesAsHash();
if($data['stemmer'] == '0'){
$avg3 = '0,00';
} else {
    $gennemsnit2 = $data['rate'] / $data['stemmer'];
    $avg3 = number_format($gennemsnit2,2);
}
    $tit = substr($data['ting'], 0, 15)."..";
echo "<tr><td background='bg-top21.gif' style='border-bottom:1px #48681E solid; height: 25px; padding-left: 5px;'><font size='2' color='#E0E0E0'><b>".$tit."</b></td></tr>";
echo "<tr><td style='border-bottom:1px #48681E solid; padding-top: 5px;' align='center' background='bg-top2.gif'><div style='background-image: url(billede2.gif); width: 87px; background-repeat: no-repeat; height: 93px' valign='top' align='left'>
<a href='#' onclick=popWin('".$data['billede']."');return false;>
<img title='".$data['ting']."' style='margin: 0px; left: 5px; position: relative; top: 4px;' height='75' src='".$data['billede']."' width='75' border='0' OnError=this.src='intet.gif'; /></a></div><font size='2'>".$avg3."</td></tr>";
    }
?>


Grunden til at den ikke henter data fra mysql er fordi jeg bruger et tekstfils-script.
Så dataer bliver gemt i en tekstfil.
Avatar billede hmm10 Nybegynder
18. marts 2007 - 18:11 #3
Hvad siger den, hvis du tilføjer (under din "$result = $db->executeQuery.."):

print "<pre>"; print_r($result); print "</pre>";
Avatar billede cschmalz Nybegynder
18. marts 2007 - 18:24 #4
udskriver alle kolloner (arrays)
Avatar billede cschmalz Nybegynder
18. marts 2007 - 18:29 #5
ResultSet Object
(
    [colNames] => Array
        (

Og en helt masse andet
Avatar billede cschmalz Nybegynder
18. marts 2007 - 18:32 #6
Skal spise - er tilbage om lidt
Avatar billede hmm10 Nybegynder
18. marts 2007 - 18:33 #7
Er jeg klar over :) kan jeg få noget mere? evt. et link med arrayet?
Avatar billede windcape Praktikant
18. marts 2007 - 18:34 #8
Lyder for mig somon at der ikke bliver brugt et INTEGER felt til værdierne.
Avatar billede cschmalz Nybegynder
18. marts 2007 - 18:37 #9
Avatar billede cschmalz Nybegynder
18. marts 2007 - 18:56 #10
har du fundet ud af noget?

altså jeg ville jo have det sådan her:
("SELECT * FROM hotornot ORDER BY stemmer/rate DESC LIMIT 5");
På en måde... altså den skal sortere efter gennemsnittet
Avatar billede hmm10 Nybegynder
18. marts 2007 - 20:09 #11
Umeldbart kan jeg ikke sorterede det, som jeg regnede med :(
Måske skal man se på SQL'en igen - ellers skal vi sortere det og lave while'en lidt om..
Avatar billede simsevu Juniormester
18. marts 2007 - 22:01 #12
Må jeg prøve

hvis du ændrer din række i Tabellen til at være en "int() instedet for en "varchar()
Avatar billede cschmalz Nybegynder
19. marts 2007 - 17:30 #13
Hvilke rækker?
Avatar billede cschmalz Nybegynder
19. marts 2007 - 17:35 #14
nu har jeg ændret rate og stemmer til int - men ingen forskel
Avatar billede mcardle Nybegynder
19. marts 2007 - 23:55 #15
Kan du huske at jeg svarede på spm. tidligere... Nu har jeg lige siddet med det igen og det virker altså hos mig med:

$q = mysql_query("SELECT total / hits as average FROM numre ORDER BY average DESC") OR die(mysql_error());
while($a = mysql_fetch_array($q)){
    echo round($a["average"],2).'<br />';
}

Det eneste du skal være opmærksom på, er hvis der ikke er stem noget endnu, så vil den melde fejl, for du kan ikke dividerer med 0. Meeen, det kan jo snilt klares med en lille if eller to.
Avatar billede cschmalz Nybegynder
20. marts 2007 - 16:48 #16
-> mcardle
Tekst systemet kunne åbentbart ikke bruge AS...

Men jeg fandt selv ud af det!
Min sql endte sådan her:

$result = $db->executeQuery("SELECT * FROM hotornot ORDER BY EVAL(rate / stemmer) DESC LIMIT 5");

og det var det der skulle til :D
Men tak igen mcardle - og fordi du ville kigge på det igen!
Avatar billede cschmalz Nybegynder
20. marts 2007 - 16:49 #17
Du får lidt point alligevel ;)
Avatar billede mcardle Nybegynder
20. marts 2007 - 19:42 #18
Hvor skal jeg svare henne... Du har jo lukket spørgsmålet.
Avatar billede cschmalz Nybegynder
21. marts 2007 - 14:12 #19
Du havde svaret... og du har fået point:

--------------------------------------------------------------------------
Accepteret svar: simsevu
18/03-2007 22:01:07
Point: 25,00 Må jeg prøve

hvis du ændrer din række i Tabellen til at være en "int() instedet for en "varchar()
Avatar billede mcardle Nybegynder
21. marts 2007 - 20:05 #20
Jeg hedder jo simsevu.

Jeg hedder mcardle, nå men det er også ligemeget. Det er jo ikke for points skyld, det er meningen vi skal lære noget nyt.
Avatar billede cschmalz Nybegynder
30. marts 2007 - 14:48 #21
http://trendy.cschmalz.dk/

Det er den færdige side :D
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