logo   Rating




Rating anvendes til at opbygge en skaleret tilkendegivelse af hvor godt et antal respondenter synes om en given hændelse (et 'synes om' barometer udtrykt ved tal eller symboler (f.eks. stjerner)).


Respondenternes stillingtagen kan enten komme til udtryk ved ja / nej eller ved en værdi på en skala.


To eksempler på et ratingsystem kan være:


  • Hvordan synes du om Roskilde-festivalen 20xx?
  • Hvordan synes du om hver af de optrædende (grupper) på Roskilde-festivalen 20xx?


I det første tilfælde skal der kun være en enkelt dataopsamling, mens der i det sidste skal være en separat dataopsamling pr optrædende.


Et ratingsystem skal kunne opsamle respondenternes data efterhånden som de indløber og løbende eller til slut præsentere uddata baseret på et dynamisk beregnet glidende gennemsnit.


Stemmeafgivning


Den simpleste stemmeafgivning består alene af 2 submit-knapper i en form: JA og NEJ, GOD og DÅRLIG etc.


Den graduerede stemmeafgivning består typisk af et antal radioknapper i en form (evt. med overlæg af museaktive stjerner eller andre billeder, så det hele ser flot ud). Der kan da være 'autosubmit' ved tryk på en af valgmulighederne. Der kan endvidere være tilknyttet vejledende tekst til de enkelte valgmuligheder; f.eks:

  • Jeg hadede den
  • Jeg syntes ikke særlig godt om den
  • Jeg syntes godt om den - fortsæt bare
  • Jeg syntes rigtig godt om den
  • Jeg elskede den




Regneregler


Formlen for glidende beregning af rating ved tilkomst af en ny 'stemme' ser således ud udtrykt ved variabelnavne:


$gl_ratingGammel rating hentet fra DB
$gl_antalTidligere afgivne antal stemmer hentet fra DB
$ratingRatingen knyttet til den aktuelle 'stemme', der udløser beregningen
$ny_ratingNy rating efter beregningen. Overføres til DB
$ny_antalNyt antal = $gl_rating + 1. Overføres til DB


$ny_rating = ($gl_rating * $gl_antal + $rating * 1) / $ny_antal;




Databasetabeller


rating


En tabel til ratings skal have to felter dertil: En til opsamling af afgivne antal 'stemmer' og en til den aktuelle rating. Det sidste skal være af decimal-typen og skal helst have ca. 10 decimaler.


Udover ovennævnte kan en ratingtabel etableres på flere måder.
Den først viste kan kun indeholde data for en rating. De næste tre kan på forskellig vis indeholde data for et nærmest ubegrænset antal ratings.


Det kan være hensigtsmæssigt, at sikre sig bedst muligt mod at en enkelt bruger afgiver 'mange' stemmer. Det kan gøres ved at opsamle stemmeafgivernes ip-adresse med $_SERVER['REMOTE_ADDR'] og gemme den i en dedikeret tabel (ratingip).


Den frøste 'ratingip' kan, som den første rating-tabel, kun indeholde data for en rating, mens den anden tabel kan indeholde data for mange ratings. I begge tilfælde kan der, som vist ved den anden tabel, opsamles yderligere data om den enkelte stemmeafgivning.




Programmer


Vedhæftet er vist fire filer relateret til indsastning af ratings. De er kun beregnet til en enkelt rating. Ved ibrugtagning af $_GET-delen kan de udvides til at kunne relateres til mange ratings. Der kan endvidere nemt kobles anden yderligere funktionalitet på dem.


Forskellen mellem dem er:


Stemmeafgivning udføres ved at trykke på knappen i formen. Lodret præsentation. x


Stemmeafgivning foretages ved at trykke på en af radioknapperne. Lodret præsentation. x


Stemmeafgivning udføres ved at trykke på knappen i formen. Vandret præsentation. (Incl. css til vandret). x


Stemmeafgivning foretages ved at trykke på en af radioknapperne. Vandret præsentation. (Incl. css til vandret). x




'Stjerner'


Hele 'stjerner'


Visning af hele 'stjerner' styres med denne kode:


$query = "SELECT rat_ratrating FROM ratingstam where rat_nummer = '$rat_nummer'";
$result = mysqli_query($db_link, $query)or die (mysqli_error ($db_link));
$row = mysqli_fetch_assoc ($result);
$antal = mysqli_num_rows ($result);
$rating = round($row['rat_ratrating'],3);
for ($i = 1; $i <= 5; $i++) {
    if ($rating > 0.833)
    {echo "A";}
    else
    {echo "a";}
    $rating = $rating - 0.833;
}


I stedet for 'A' og 'a' kan indsættes billeder med hhv. 'gode' og dårlige' stjerner.


Stjernerne vises på følgende måde:


RatingFordeling af stjerner
0.000 - 0.833aaaaa
0.834 - 1.667Aaaaa
1.668 - 2.500AAaaa
2.501 - 3.333AAAaa
3.334 - 4.167AAAAa
4.168 - 5.000AAAAA


Beregningen kan umiddelbart tilpasses andre ratings end de ovenfor beskrevne 5.


Halve 'stjerner'


Visning af halve 'stjerner' styres med denne kode (halve stjerner = 'b':


$query = "SELECT rat_ratrating FROM ratingstam where rat_nummer = '$rat_nummer'";
$result = mysqli_query($db_link, $query)or die (mysqli_error ($db_link));
$row = mysqli_fetch_assoc ($result);
$antal = mysqli_num_rows ($result);
$rating = round($row['rat_ratrating'],3);
for ($i = 1; $i <= 5; $i++) {
   if ($rating > 0.833)
   {echo "A";}
   elseif($rating > 0.333 and $rating < 0.667) //bestemmer "bredden" påvisning af halve stjerner. Min. 0.001 Max 0.832
   {echo "b";}
   else
   {echo "a";}
   $rating = $rating - 0.833;
}




Uddata


Uddata (3 stjerner) kan vises med udgangspunkt i denne kode:


$query_rat = "SELECT rat_ratrating FROM ratingstam where rat_nummer = '$rat_nummer'";
$result_rat = mysqli_query($db_link, $query_rat)or die (mysqli_error ($db_link));
$row_rat = mysqli_fetch_assoc ($result_rat);
$antal_rat = mysqli_num_rows ($result_rat);
$rating = round($row_rat['rat_ratrating'],3);
echo $rating. "<br /><br />Den aktuelle rating er:<br />";
for ($i = 1; $i <= 5; $i++)
{
    if ($rating > 0.833)
    {
    echo '<img src="billeder/gron.png" alt="x"/>';
    }
    elseif($rating > 0.333 and $rating <0.667) //bestemmer "bredden" på halve stjerner. Min. 0.000 Max 0.833
    {
    echo '<img src="billeder/gul.png" alt="x"/>';
    }
    else
    {
    echo '<mg src="billeder/rod.png" alt="x"/>';
    }
    $rating = $rating - 0.833;
}






















x
x