Frage zu SUM()

Biber90

Mitglied
Hallo!

Ich habe ein Bewertungs-system für Galerien mit PHP gemacht....Zur Zeit wird immer, wenn jemand die Galerie bewertet, sein Name, der Name der bewerteten Galerie und die Bewrtungs-punktzahl (1-10) gespeichert....im Extremfall habe ich dann also (Anzahl der Benutzer * Anzahl der Galerien)-Einträge in der Datenbank....

Das Problem ist, dass ich nicht weiß, wie ich dann die Punkte zusammenzählen soll, um so etwas wie eine Top-10 der Galerien zu kriegen....ich muss dann ja immer alle Punkte von einem Benutzer zu der Galerie zusammenzählen *ich hoffe man versteht das so*

Habe ich schon einen falchen Ansatz genommen? Geht es vielleicht leicher? Oder braucht man nur einen anderen Befehl?

Stehe grade wirklich etwas auf dem Schlauch *ggg*
 
Hallo,

Der Ansatz, den Benutzer und die bewertete Galerie zu speichern, ist schon mal gut.
Eine einfache Summe wird wahrscheinlich nicht reichen um die Top10 zu ermitteln, da du ja so auch so Galerien, die nicht so oft bewertet werden gegenüber denjenigen, die häufig bewertet werden schlechter stellst.

Der Durchschnitt aller Bewertungen je Galerie wäre hier also besser und nach diesen würde ich dann absteigend die besten Galerien ermitteln. Das ganze kannst du natürlich noch gewichten wie du es brauchst.

Falls du eine Datenbank-Abfrage machen möchtest und deine Tabelle dahinter etwa so aussieht:

( user_id, galerie_id, punktzahl )

dann kannst du recht einfach mittels:

SQL:
SELECT galerie_id, AVG(punktzahl) AS durchschnitt
  FROM user_galerie_bewertungen
 GROUP BY galerie_id
 ORDER BY AVG(punktzahl) DESC
 LIMIT 10;

Falls du z.B. erst dann eine Galerie in einer Übersicht zeigen möchtest, wenn eine bestimmte Anzahl Bewertungen eingegangen sind, dann kannst du zusätzlich noch:

SQL:
  SELECT galerie_id, AVG(punktzahl) AS durchschnitt
  FROM user_galerie_bewertungen
 GROUP BY galerie_id
 HAVING COUNT(*) >= 3
 ORDER BY AVG(punktzahl) DESC
 LIMIT 10;

Das Beispiel würde nur Galerien berücksichtigen, die mindestens 3 Bewertungen haben.

Hoffe es hilft,

Markus
 
Also erstmal danke für die schnelle Antwort :-)

Es ist wirklich besser einfach den Durchschnitt zu bilden :-)

Nur gibt er mir leider die Fehlermeldung "Invalid use of group function" aus....obwohl mein Quelltext so stimmt...ich habe deine 1. Möglichkeit an meine Datenbank angepasst....
 

Neue Beiträge

Zurück