Avatar billede michaeltryl Seniormester
16. august 2006 - 20:37 Der 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());

// udskriv resultatet
while($row = mysql_fetch_array($result))
{
    echo "Total ". $row['sideID']. " = $". $row['SUM(stemme)'];
    echo "<br />";
}
?>
Avatar billede nielle Nybegynder
16. august 2006 - 20:44 #1
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());
Avatar billede michaeltryl Seniormester
16. august 2006 - 21:14 #2
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());
}
Avatar billede michaeltryl Seniormester
16. august 2006 - 21:26 #3
derudover ville det være godt hvis man kan gøre sådan at gennemsnittet kun bliver skrevet med 1 decimal
Avatar billede nielle Nybegynder
16. august 2006 - 21:41 #4
Noget i denne stil:

//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());

    // Udskriv.
    echo "Total $sideID = $" . round(totalkarakter, 1);
    echo "<br />";
}
Avatar billede michaeltryl Seniormester
16. august 2006 - 22:08 #5
yes det virker jo fantastisk godt, men er det muligt at udskrive gennemsnittet som laves med AVG med kun 2 decimaler
Avatar billede nielle Nybegynder
16. august 2006 - 22:14 #6
Sådan?

    // Udskriv.
    echo "Total $sideID = $" . round($totalkarakter, 1) . "<br>";
    echo "Gennemsnit = $ " . round($gennemsnit, 2). "<br>";
Avatar billede michaeltryl Seniormester
16. august 2006 - 22:18 #7
mange tak for hjælpen kom med et svar så skal du få point
Avatar billede nielle Nybegynder
16. august 2006 - 22:21 #8
Svar :^)
Avatar billede michaeltryl Seniormester
16. august 2006 - 22:47 #9
lige et lille spørgsmål mere.
hvordan kan jeg hvis min top liste indeholder 10 sider og kun vil vise en top 5
Avatar billede Slettet bruger
16. august 2006 - 23:17 #10
$result = mysql_query("SELECT avg(stemme) AS gennemsnit FROM stemmer WHERE sideID=$sideID LIMIT 5") or die(mysql_error());
Avatar billede michaeltryl Seniormester
16. august 2006 - 23:19 #11
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'

denne topliste viser så alle kort tricks

håber du forstår og vil hjælpe
Avatar billede nielle Nybegynder
17. august 2006 - 07:24 #12
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>";
}
Avatar billede nielle Nybegynder
17. august 2006 - 07:27 #13
16/08-2006 23:19:37>

Noget i denne stil:

... WHERE kategori = 'tricks' AND underkategori = 'kort'

- men med mindre at der også er en underkategori som hedder "kort" i andre kategorier, kan du klare dig med:

... WHERE underkategori = 'kort'
Avatar billede michaeltryl Seniormester
17. august 2006 - 08:11 #14
det er det største gennemsnit og jeg har fået det hele til at virke
mange tak for hjælpen
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

Capgemini Danmark A/S

Client Partner

Rambøll Management Consulting

Senior Software Engineer

Politiets Efterretningstjeneste

PET søger softwareingeniører til Ruslandsområdet

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger en IT-supporterelev til lokal IT på Haderslev Kaserne