iceget
Goto Top

Bewertungssystem wie berechnen?

Hallo liebe Community,

ich habe folgendes Problem:

Die Benutzer auf einer Website (angemeldet mit ihrer email) dürfen Rezepte bewerten.

Meine Datenbank sieht wie folgt aus:

Rezepte:
id, titel, Beschreibung

Rezepte_Bewertungen:
id, rezeptid, userid, Bewertung

Jeder der Benutzer darf das Rezept nur einmal bewerten.

Dazu kann er 1 bis 5 Sterne vergeben.

Nun habe ich z.B. folgende Auswertung:

Rezepte_Bewertungen,
1, 100, 10, 5
2, 100, 11, 3
3, 100, 12, 5
4, 100, 13, 2
5, 100, 14, 1
6, 100, 15, 3
7, 100, 16, 3
8, 100, 17, 3
9, 100, 18, 5
10, 100, 19, 5
11, 100, 20, 4

Nun habe ich für das Rezept mit der id 100, 11 Bewertungen:

1 Stern: 1
2 Sterne: 1
3 Sterne: 4
4 Sterne: 1
5 Sterne: 4

Mein Problem ist nun folgendes:
Ich weiß nicht wie ich die Bewertung auf der Website anzeigen / berechnen soll?

Im Endeffekt soll das Rezept nur so viele Sterne bekommen wie in Summe der Durchschnitt ergibt?

Ich habe schon einiges berechnen versucht, auch die einzelnen Sterne zusammen gezählt / die Gesamtanzahl.
Ich bekomme immer nur zahlen raus die größer als 5 sind (was auch logisch ist).

Wie kann ich dieses Problem lösen?

Vielen Dank schon mal vorweg

Content-Key: 278717

Url: https://administrator.de/contentid/278717

Printed on: April 25, 2024 at 20:04 o'clock

Member: wiesi200
Solution wiesi200 Jul 29, 2015, updated at Jul 30, 2015 at 08:39:58 (UTC)
Goto Top
Hallo,
nö das du nur Zahlen größer 5 raus bekommst ist nicht logisch wenn du den Durchschnitt berechnen willst.

Anzahl der Sterne / Anzahl Bewertungen.
Und das würd ich mir eigentlich sogar eher vom SQL bei der Abfrage berechnen lassen. Sollte schneller gehen als die Daten an PHP zu übergeben und dann dort zu berechnen

Edit: Übrigens deine Tabellendarstellung ist falsch.
Spalte 1 ist wenn dann von 1 bis x durchnummeriert.
Spalte 2 sollte überall eine 1 drinnen stehen.
Member: evolution
evolution Jul 29, 2015 at 19:05:46 (UTC)
Goto Top
Na am einfachsten im SQL mit einem AVG() berechnen lassen.

Google doch mal "build star rating system sql php", da findest du hunderte Anleitungen.. Ein Beispiel: http://codular.com/part-2-rating-system
Member: Snowman25
Snowman25 Jul 30, 2015 updated at 08:53:33 (UTC)
Goto Top
Den Durchschnitt bildet man durch Zusammenzählen der Punkte und dann das Teilen durch die Gesamtanzahl Bewertungen.
Das ist Mathe 2. Klasse. (Falls nicht sogar erste)

Beispiel:
Wertung Anzahl
1 1
2 1
3 4
4 1
5 4
Insgesamt 11 Stimmen:
Wertung Anzahl
1 1 +
2 1 +
3 4 +
4 1 +
5 4
--
STIMMEN 11

Jetzt zur SUMME:
Wertung * Anzahl Ergebnis
1 * 1 = 1
2 * 1 = 2
3 * 4 = 12
4 * 1 = 4
5 * 4 = 20
SUMME 39

Endergebnis:
SUMME / STIMMEN ERGEBNIS
39 / 11 = 3,5454...

Das Rezept hat also 3,5 Sterne.


Gruß,
@Snowman25
Member: iceget
iceget Jul 30, 2015 updated at 08:45:30 (UTC)
Goto Top
Hi wiesi 200,

danke. ich hab's gestern auch so berechnet nur habe ich in PHP vergessen die Klammern zu setzen, das war mein Problem...!

So funktionierts:

$bewertungsdurchschnitt = round((($BW_EINS*1)+($BW_ZWEI*2)+($BW_DREI*3)+($BW_VIER*4)+($BW_FUENF*5))/$DBsummary);

Und ja, Du hattest recht. Ich habe das Autoincrement nicht reingeschrieben.

Vielen Dank


Zitat von @wiesi200:

Hallo,
nö das du nur Zahlen größer 5 raus bekommst ist nicht logisch wenn du den Durchschnitt berechnen willst.

Anzahl der Sterne / Anzahl Bewertungen.
Und das würd ich mir eigentlich sogar eher vom SQL bei der Abfrage berechnen lassen. Sollte schneller gehen als die Daten an
PHP zu übergeben und dann dort zu berechnen

Edit: Übrigens deine Tabellendarstellung ist falsch.
Spalte 1 ist wenn dann von 1 bis x durchnummeriert.
Spalte 2 sollte überall eine 1 drinnen stehen.