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_rating | Gammel rating hentet fra DB |
$gl_antal | Tidligere afgivne antal stemmer hentet fra DB |
$rating | Ratingen knyttet til den aktuelle 'stemme', der udløser beregningen |
$ny_rating | Ny rating efter beregningen. Overføres til DB |
$ny_antal | Nyt antal = $gl_rating + 1. Overføres til DB |
$ny_rating = ($gl_rating * $gl_antal + $rating * 1) / $ny_antal;
|
Databasetabeller
![rating](rating/ratingtabeller02.jpg)
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](/felles/ikoner/right.gif)
Stemmeafgivning foretages ved at trykke på en af radioknapperne. Lodret præsentation. ![x](/felles/ikoner/right.gif)
Stemmeafgivning udføres ved at trykke på knappen i formen. Vandret præsentation. (Incl. css til vandret). ![x](/felles/ikoner/right.gif)
Stemmeafgivning foretages ved at trykke på en af radioknapperne. Vandret præsentation. (Incl. css til vandret). ![x](/felles/ikoner/right.gif)
'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:
Rating | Fordeling af stjerner |
0.000 - 0.833 | aaaaa |
0.834 - 1.667 | Aaaaa |
1.668 - 2.500 | AAaaa |
2.501 - 3.333 | AAAaa |
3.334 - 4.167 | AAAAa |
4.168 - 5.000 | AAAAA |
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;
}
|
|