16. august 2006 - 20:37Der er
13 kommentarer og 1 løsning
rating system hvordan med sum og gennemsnit
Jeg er ved at lave et rating system og men er nu kommet dertil at jeg skal have alle stemmerne i den ene tabel, hvor sideID=1 (eller hvad sider id siden nu har) lagt sammen og resultatet skal puttes ind i den anden tabel (SIDER felt=totalkarakter)derudover skal der regnes et gennemsnit ud resultat/antal stemmer og puttets ind i tabellen SIDER felt=gennemsnit. disse to tal skal opdateres hver gang der bliver stemt. håber der er en som kan give mig hjælp til at komme videre.
jeg har disse to tabeller SIDER: ID int navn varchar url varchar totalkarakter int gennemsnit varchar
STEMMER: ID int sideID stemme
min kode ser pt. sådan ud: <? // connect til database
//hent indhold fra formular $stem = $_REQUEST["stem"]; $sideID = 1; // her skrives sidens id
//tjekker om der er noget i stem if(!empty($stem)) { //indsæt data i databasen mysql_query("INSERT INTO stemmer (ID, sideID, stemme) values(0, '$sideID', '$stem')") or die(mysql_error()); }
//antal poster tælles $tael = mysql_query("SELECT COUNT(*) AS antal FROM stemmer WHERE sideID=$sideID") or die(mysql_error()); $row = mysql_fetch_array($tael); echo "<h3>Der er stemt ".$row[antal]." gange</h3>"
//udregn totalkarakter $query = "SELECT sideID, SUM(stemme) FROM stemmer WHERE sideID=$sideID"; $result = mysql_query($query) or die(mysql_error());
Foruden Sum() så findes der en funktion Avg() som beregnere gennemsnittet. D kan derfor lave hele beregningen i en og samme SQL:
$tael = mysql_query("SELECT Count(*) AS antal, Sum(stemme) AS total, Avg(stemme) AS gennemsnit FROM stemmer WHERE sideID=$sideID") or die(mysql_error());
ja det var smart kan du så hjælpe mig med det sidste min kode ser nu sådan ud, men der indsættes en ny post i tabellen sider når der stemmes, men den skal opdatere posten som har samme ID som sideID, hvordan kan jeg gøre dette?
$tael = mysql_query("SELECT Count(*) AS antal, Sum(stemme) AS total, Avg(stemme) AS gennemsnit FROM stemmer WHERE sideID=$sideID") or die(mysql_error()); $row = mysql_fetch_array($tael); $total="$row[total]"; $gennemsnit="$row[gennemsnit]";
//tjekker om der er noget i stem if(!empty($stem)) { //indsæt data i databasen mysql_query("INSERT INTO sider (ID, navn, url, totalkarakter, gennemsnit) values(0, 0, 0, '$total', '$gennemsnit')") or die(mysql_error()); }
//hent indhold fra formular $stem = $_REQUEST["stem"]; $sideID = 1; // her skrives sidens id
//tjekker om der er noget i stem if (!empty($stem)) { // Indsæt stemmein i tabellen stemmer. mysql_query("INSERT INTO stemmer (ID, sideID, stemme) VALUES (0, $sideID, $stem)") or die(mysql_error());
// Udtræk statistik fra tabellen stemmer. $result = mysql_query("SELECT avg(stemme) AS gennemsnit FROM stemmer WHERE sideID=$sideID") or die(mysql_error()); $row = mysql_fetch_assoc($result); $totalkarakter = $row["totalkarakter"]; $gennemsnit = $row["gennemsnit"];
// Opdater statistik i tabellen sider. mysql_query("UPDATE sider SET totalkarakter = $totalkarakter, gennemsnit = $gennemsnit WHERE id=$sideID") or die(mysql_error());
jeg har lavet to ekstra felter i tabellen sider, sådan jeg kan indele siderne i kategorier og på den måde lave toplister for hvor kategori. jeg ønsker dog også at have et felt med underkategorier sådan jeg kan have en topliste som viser alle sider i kategorien tricks, men også en topliste med kategorien tricks med underkategori kort.
det betyder at jeg skal have to WHERE i udtrækket, men hvordan gør jeg det der skal være en WHERE kategori = 'tricks' og WHERE underkategori = 'kort'
16/08-2006 22:47:35> Det afhænger lidt af hvordan du definere "topliste". Er det de 5 sider som har den største total, eller de 5 sider som har det største gennemsnit?
Hvis det nu er gennemsnittet:
$sql = "SELECT sideID, sum(stemme) AS totalkarakter, avg(stemme) AS gennemsnit FROM stemmer GROUP BY sideID ORDER BY gennemsnit DESC LIMIT 5" $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { // Udskriv. echo "Total $row[sideID] = $" . round($row["totalkarakter"), 1) . "<br>"; echo "Gennemsnit = $" . round($row["gennemsnit"], 2) . "<br><br>"; }
det er det største gennemsnit og jeg har fået det hele til at virke mange tak for hjælpen
Synes godt om
Ny brugerNybegynder
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.