Bewerten

kevkev

Erfahrenes Mitglied
Hi,

Ich habe gerade ein kleines Script auf, wo die User die Möglichkeit haben sollen, bestimmte Artikel zu bewerten.

Dabei können Sie User auswählen, wie hilfreich der Artikel war.
Bewerten die User den Artikel alle sehr Gut, würde dann pratkisch 100% angezeigt werden.

Aber wie rechne Ich aus, wenn z.b. ein User "nicht hilfreich" bewertet?
Wie reche Ich nun aus, das es anstatt 100%, eben, 50% sind?

Es gibt ja nicht nur "sehr gut" und "sehr schlecht". Zwischen werte, z.b. "Gut" "Naja" sollen auch irgendwie mit in die Rechnung rein.

Leider habe Ich überhaupt keinen Ansatz, wie ich das am besten ausrechne.

Habt Ihr ne Idee?

Gruß Kevin
 
Wenn ich dich Richtig verstehe, willst du den Durchschnitt von Worten ermitteln.
Sehe ich das richtig, dann lies weiter :)

Sei also die Menge aller zu verwenden Worte W = { gut, sehr gut, okay, naja, schlecht }
Hierzu assoziierst du Zahlen Z = { 2,1, 3, 4, 5}

Nun addierst du nicht deine Worte zusammen sondern deine Zahlen. Teilst die Summe durch die Anzahl der Bewerteten abgaben und rundest das Ergebnis auf eine ganze Zahl.
Diese gerundete ganze Zahl kann nun wieder mit einem Wort assoziiert werden und Zack hast du dein "Durchschnittswort".


MfG
Basti
 
Hi,

ahh, sehr gut ;)!

Aber je nach anzahl der Bewertungen, variiert doch der Durchschnitswert.
Aber wie binde Ich den Wert immer an ein bestimmtes Wort?

gruß Kevin
 
kommt drauf an, wie du es lösen willst.
Ich gehe mal davon aus, das du weisst, wie man das Problem lösen würde, würde man mit Zahlen statt mit worten arbeiten!
So hoffe ich?
Das stellt ja kein Problem dar, so denke ich ;)

Hier mein Lösungsvorschlag via Datentyp Map.

Erzeuge dir einen Datentyp Assoziation.
Bsp.
PHP:
 class assoziation{
 
 	var $wort;
 	var $wert;
 }

Von diesem erstellt du dir ein Array mit soviel werten wie du brauchst (sagen wir 6, als Beispiel, schulnoten)

PHP:
 $asso_arr[0] = new assoziation();
 $asso_arr[1] = new assoziation();
 $asso_arr[2] = new assoziation();
 $asso_arr[3] = new assoziation();
 $asso_arr[4] = new assoziation();
 $asso_arr[5] = new assoziation();
 
 $asso_arr[0]->wort = "sehr gut";
  $asso_arr[0]->wert = 1;
 $asso_arr[1]->wort = "gut";
  $asso_arr[1]->wert = 2;
 
 // usw für alle werte

nun kannst du diesen Datentyp einfach benutzen und hast immer eine Zahl mit einem Wort assoziiert.
Genauere Informationen findest du, wenn du nach der Datenstruktur "Map" bzw "Abbildung" googelst.

PS: Skripte sind frei Schnauze geschrieben und könnten etwaige Tippfehler beinhalten.
-> Der Sinn ist dir aber hoffentlich klar?

MfG :)
Basti
 
Hi,

Oh, hab mir das leichter vorgestellt :p.

Gleich mit Klassen zu arbeiten ist doch ein wenig "groß", oder?
Jedenfalls kapiere Ich nicht was genau du da machst ^^.

gruß Kevin
 
Datentypen sind keinesfalls zu groß, aber für das Problem gehts auch einfacher!

Also anhand eines Beispiels.

1. Erzeuge dir ein HTML Dropdown menü, bei dem du für jeden Option einen Value setztn
Bsp:
Code:
<select>
<option value="1" name="sehrgut">Sehr gut</option>
<option value="2" name="gut">gut</option>
....
</select>
2. Speichere jede Bewertung als Zeile in einer Datenbanktabelle
Bsp:
ID | Bewertung
1 | 2 <--- entspräche einem gut
2 | 5 <--- entspräche einem mangelhaft
3 | 1 <--- entspräche einem ungenügend
....

3. addiere die Bewertung jeder zeile zusammen und teile das Ergebnis durch die Anzahl der Zeilen:
Bsp (von oben):
2 + 5 +1 = 8
Anzahl Bewertungen = 3
8/3 = 2,666
runden: 3

4. Nun hast du den gerundeten durchschnitt aller bewertungen
5. Du hast ein Array wie folgt:
PHP:
$assoziationen[1] = "sehr gut";
$assoziationen[2] = "gut";
$assoziationen[3] = "befrieidigend";
$assoziationen[4] = "ausreichend";
$assoziationen[5] = "mangelhaft";
$assoziationen[6] = "ungenügend";

6. nun möchtest du ausgeben, was du fürn "Wortdurchschnitt" du hast:
Hierzu nehmen wir uns die errechnete 3.

$durchschnitt = 3; // wurde ja errechnet!!

Hiermit greifen wir auf das Array zu:
PHP:
echo $assoziationen[round($durchschnitt)]; // gibt gerade befrieidigend aus



Ich hoffe jetzt ist dir klar, wie du rangehen solltest?


PS: Das ganze mit einer Map zu regeln wäre aber eine schönere Variante. IS aber nicht notwendig, ich hab das gerade n paar Studenten erklärt und daher hängt mir das passenderweise gerade im Kopf ;)
 
Hi,

Danke :D!

Aber beim errechnen des Durchschnittes kommt bei mir 8 raus:
PHP:
<?php 
$assoziationen[1] = "sehr gut";
$assoziationen[2] = "gut";
$assoziationen[3] = "befrieidigend";
$assoziationen[4] = "ausreichend";
$assoziationen[5] = "mangelhaft";
$assoziationen[6] = "ungenügend";  

//Das sind ja die Anzahl Bewertungen, die jeder User z.b. für "Sehr gut" macht
$zeile1 = 5;
$zeile2 = 10;
$zeile3 = 4;
$zeile4 = 20;
$zeile5 = 5;
$zeile6 = 2;


$durchschnitt = round((($zeile1+$zeile2+$zeile3+$zeile4+$zeile5+$zeile6)/6));
echo $durchschnitt;
?>

Ich denke das liegt daran, das Ich einfach die Anzahl Bewertungen zusammenzähle, die für jede "note" vorhanden sind.
Aber nehmen wir an, 200 Leute Bewerten "mangelhaft".
Dann würde ja in der Zeile 200 bei "3" stehen, aber dann stimmt ja die komplette rechung nicht mehr.

gruß kevin
 
Zuletzt bearbeitet:
kevkev hat gesagt.:
Aber beim errechnen des Durchschnittes kommt bei mir 8 raus:

Hallo,
der richtige wert ist 7.666666666666 und mit [phpf]round[/phpf] rundest du den Wert nun auf eine Stelle.
Also 8, bei [phpf]round[/phpf] kann man übrigens einstellen, auf wie viel Stellen er nachdem Komma runden soll.

mfg
forsterm
 
Hi,

Ja Ich weiß, aber das Array brauch ja nur eine zahl, und keine Komma Zahl.
Auch wenn da 7 rauskommen würde, würde es nicht stimmen, da im Array keine 7 vorkommt.

Und umso höher die Votings werden, umso höher würde dann auch der Durchschnitt.
Und das kann irgendwie nicht ganz passen :-/.

gruß Kevin
 
Zuletzt bearbeitet:
Hi,

Ich hab grad ne andere Möglichkeit aufgeschnappt:
PHP:
<?php 
$assoziationen[1] = "sehr gut";
$assoziationen[2] = "gut";
$assoziationen[3] = "befrieidigend";
$assoziationen[4] = "ausreichend";
$assoziationen[5] = "mangelhaft";
$assoziationen[6] = "ungenügend";  

$ratings = 3;
$ratingcount = 10;

$durchschnitt = round($ratingcount/$ratings);
echo $assoziationen[$durchschnitt];
?>

So würde es doch auch Funktionieren, richtig?

Gruß Kevin
 
Zurück