durchschnittliche Bewertung ausrechnen

son gohan

Erfahrenes Mitglied
Hallo, ich habe in einer Mysql Tabelle Bewertungen gesammelt als Datensätze, jeweils nach folgender Strucktur:

bewertung | dateiname
------------------------------------
10 | auto.html
3 | auto.html

Jetzt will ich an einer Stelle den Durchschnitt der Bewertungen ausrechnen, ich weis aber nicht mir welcher mysql Abfrage ich das am besten mache.

Die Rechnung müsste so aussehen:

Die Summe aller Dateinamen die gleich sind (was auch gleich der Summe an abgegebenen Stimmen ist), geteilt ducrh die Summe der Bewertungen mit gleichem Dateinamen.
 
Servus, danke für den Link, mit der Suche habe ich echt oft meine Probleme, da finde ich meist nur das was ich nicht suche, bitte nicht übel nehmen.
 
hi, den ersten Schritt habe ich schon mal geschaft, ich kann den Durschnitt der Bewertungen nun ausrechnen lassen mit einer Select Abfrage.

Jetzt will ich aber auf einer Seite der Reihe nach die Artikel ausgeben mit den höchsten Bewertungen. Ich weis aber nicht wie ich anfangen soll.

Die Bewertungen sind alle in eine Tabelle gespeichert:

PHP:
bewertung | dateiname | titel
10            |  auto.html  | Auto
7              | auto.html   | Auto
5              | rad.html     | Rad
3              | balon.html  | Ballon
7              | auto.html   | Auto
6              | rad.html     | Rad

Wie kann ich jetzt vorgehen, nach einer einzelnen Datei kann ich ja nicht fragen, ich muss irgendwie die Summ der Bewertungen aller Dateien mit gleichen Dateinamen ausrechnen und dann mit allen anderen vergleichen, sieht ziemlich kompliziert aus?
 
Hi, danke für deine Hilfe!
Ich weis nicht ob es mit "order by" funktionieren kann, dazu ist es schon zu lange her das ich Mysql gelernt hatte :-( .

Also ich versuch es noch mal einfacher zu erklären, auf jeder meiner Seiten ist ein Formular mit dem man die Seiten bewerten kann mit Punktzahlen von 1-10, schickt man das formular ab wird die Bewertung zusammen mit Dateiname und Seitentitel in eine Tabelle geschrieben.

Nun hab ich halt die Tabelle voll mit Datensätzen:
PHP:
bewertung | dateiname | titel 
10            |  auto.html  | Auto 
7              | auto.html   | Auto 
5              | rad.html     | Rad 
3              | balon.html  | Ballon 
7              | auto.html   | Auto 
6              | rad.html     | Rad

Wenn man jetzt rechnet wird man feststellen das die auto.html am meisten Punkte hat, 10+7+7=24 Punkte. Die rad.html hat die zweitmeisten Punkte 5+6=11 Punkte und die balon.html hat nur 3 Punkte bekommen.

Diese Rechnung will ich nun irgendwie automatisch ausführen lassen damit mir der Reihe nach in einer Liste die Dateien mit den hächsten Punktzahlen runter bis zu den niedrigsten ausgegeben werden, so z.B.

PHP:
<ol start="1" type="1">
<li><a href="auto.html">Auto</a><br /><span class="red small">Wertung 4,45</span></li>
<li><a href="rad.html">Rad</a><br /><span class="red small">Wertung 3,45</span></li>
<li><a href="balon.html">Balon</a><br /><span class="red small">Wertung 1,45</span></li>
</ol>

Hm, ich hoffe man versteht jetzt wenigstens was ich meine :-( .

Eine Abfrage um herauszufinden wie hoch die Durchschnittliche Bewertung einer einzelnen Seite ist hab ich schon und sieht so aus:
PHP:
mysql_query("SELECT SUM(bewertung)/COUNT(dateiname) AS summe FROM `$tabelle` WHERE `dateiname`='".$_SERVER['PHP_SELF']."'")

Um jetzt aber alle Datensätze mit verschiedenen Dateien zu filtern fällt mir momentan nichts ein.
 
nja, am einfachsten mit mehreren mysql abfragen
vlt nicht super tolle perfomance, aber allzuviele verschiedene dateien wirste ja net ham, also wird es net soooo schlimm sein^^
also erst halt alle verschiedenen dateinamen abfragen und dann für jede die bewertung abfragen und in array speichern oder so. das array kannste dann ja auch eifnach sortieren mit phpfunktionen und dann alles sortiert ausgeben...
könnte man vlt auch ALLES mit mysqlbefehlen machen... aber naja... umso komplizierter um so schwerer wartbar und um so wahrscheinlicher dass man nen fehler einbaut
also lieber einfach lassen und auf super performance in dem fall pfeifen, glaub nicht dass de das wirklich brauchst^^
 
nja, am einfachsten mit mehreren mysql abfragen
vlt nicht super tolle perfomance, aber allzuviele verschiedene dateien wirste ja net ham, also wird es net soooo schlimm sein^^
also erst halt alle verschiedenen dateinamen abfragen und dann für jede die bewertung abfragen und in array speichern oder so. das array kannste dann ja auch eifnach sortieren mit phpfunktionen und dann alles sortiert ausgeben...
könnte man vlt auch ALLES mit mysqlbefehlen machen... aber naja... umso komplizierter um so schwerer wartbar und um so wahrscheinlicher dass man nen fehler einbaut
also lieber einfach lassen und auf super performance in dem fall pfeifen, glaub nicht dass de das wirklich brauchst^^


also ich hab wirklich nicht viele Seiten, aber es kommen immer wieder neue dazu und ich kann nicht jedesmal aufs neue jede einzelne Seite abfragen. Da muss es eine bessere Lösung geben, unter http://www.focus.de/intern/ranglisten/news-voting ist genau sowas aufgebaut wie ich es auch bauen will.

Sorry, aber das ist echt nicht so gut jede Seite einzeln abfragen, viel zu viel Aufwand. Die anderen Schritte sind dafür aber schon hilfreich von dir geschildert.

Ich muss irgendwie anders für jede Datei einzeln automatisch den Durschnitt ausrechnen lassen :confused:
 
Hallo,

könnte man vlt auch ALLES mit mysqlbefehlen machen... aber naja... umso komplizierter um so schwerer wartbar und um so wahrscheinlicher dass man nen fehler einbaut
also lieber einfach lassen und auf super performance in dem fall pfeifen, glaub nicht dass de das wirklich brauchst^^
Also irgendwie find ich…
PHP:
$result = mysql_query("SELECT AVG(`bewertung`) AS `durchschnitt`, `dateiname` FROM `$tabelle` GROUP BY `dateiname`");
...weder kompliziert, noch schwer wartbar. Aber wenn du das einfacher mit PHP implementieren kannst, bitte :)

Übrigens: laut Netiquette sollte man sich in diesem Forum an korrekte Groß-/Kleinschreibung halten...

Grüße,
Matthias
 
nun ich hab mir ja kein plan über nen entsprechenden mysql befehl gemacht deshalb auch keinen plan gehabt wie kompliziert das wohl wäre^^ Aber habs mir halt mal spontan kompliziert vorgestellt, und dachte deshalb gleich an php ;)
 

Neue Beiträge

Zurück