[PHP] Vote Durchschnitt ermitteln

digiTALE

Lt. Junior Grade
Registriert
Juli 2004
Beiträge
270
Seit gegrüsst,

Ich würde gerne von einem Vote den Durchschnitt ermitteln. Man kann zwischen den Zahlen 1-5 Voten die in einer Datenbank liegen. Jetzt ist das Problem wie ich diese ganzen Zahlen addiere + zählen wieviele Votes vorliegen um den Durchschnitt zu ermitteln.

Finde auch nichts im Web was mir einigermaßen weiterhelfen könnte.

Wie kann ich schonmal die ganzen Zahlen addieren?
 
Wie sind die Daten in einer Tabelle gespeichert?

Wird für jeden Vote ein neuer Datensatz angelegt oder werden die Daten in einem einzigen Datensatz gespeichert?

Evtl kannst du etwas mit der SUM() Funktion in der SQL Abfrage erreichen.
 
Die Daten sind als "Varchar" in der Tabelle Zeilenweise gespeichert also immer ein neuer Datensatz. Hmm, mal schauen ob das mit "sum()" klappt.
 
gegebenenfalls musst du die Tabelle bearbeiten und die Spalte als Integer speichern.
dann sollte SUM() funktionieren. Oder du machst eine Abfrage mit einer WHERE Klausel und zählst mit COUNT() die Anzahl Datensätz
 
Habe jetzt den Tabellentyp auf Integer umgestellt.


So sieht die Abfrage aus
PHP:
$Abfrage = "SELECT sum(vote) FROM $tabl";

$Vote = mysql_query($Abfrage) or die (mysql_error());

$Zaehlen = mysql_num_rows($Vote);


print "Durchschnitt = " . $Vote / $Zaehlen . "<br /><br />\n";

Aber so recht funktioniert das nicht!
 
Zuletzt bearbeitet:
Deine Abfrage gibt nur ein Feld mit der Summe von der Vote spalte wieder (sollte es zumindest) wenn du nun durch die Anzahlzeilen teilst, dann teilst du durch 1.

Sorry, ich habe wohl übersehen, dass du den Durchschnitt willst. das kannst du mit der avg() funktion erledigen. (habe nur Summe und Zählen gelesen)

PHP:
$sql = "SELECT AVG(Vote) AS Durchschnitt FROM $table";
$result = mysql_query($sql);
echo mysql_result($result, 0) //bin mir da nicht so sicher, ob ich die mysql_result() Methode richtig angewandt habe, benuze normalerweise nur mysql_fetch_array();
 
Zuletzt bearbeitet:
Ich würde es so probieren:

PHP:
$summe = 0;

$Abfrage = "SELECT vote FROM $tabl";

$result = mysql_query($Abfrage) or die (mysql_error());

$Zaehlen = mysql_num_rows($result);

while($datensatz = @mysql_fetch_array($result)){
 $summe += $datensatz['vote'];
}

print "Durchschnitt = " . $summe / $Zaehlen . "<br /><br />\n";
 
Hey Ho,

das ist doch mal ultimative :). Fuktioniert einwandfrei. Thanks
 
Die while schleife kann man sich evt. schenken. 1 Durchlauf sollte auch reichen.
Probier mal folgendes, ob es bei Dir funzt. Falls nicht dann halt wie gehabt.

PHP:
$erg = 0;

$Abfrage = "SELECT SUM(vote) summe, COUNT(*) cnt FROM $tabl";
$result = mysql_query($Abfrage) or die (mysql_error());

if($datensatz = @mysql_fetch_array($result)){
 $erg = $datensatz['summe'] / $datensatz['cnt'];
}

print "Durchschnitt = " . $erg . "<br /><br />\n";

Analog mit AVG(vote) sollte aber auch gehen, also bei mir zumindest
 
Zuletzt bearbeitet:
@ Relict

Die Durchschnitts Berechnung funktioniert auch wunderbar ;) . Habe noch die round() Funktion hinzugefügt, sonst gibt er bei Nachkommazahlen 2.666666666.... usw aus.

Jetzt wid der Wert mit 2 Nachkommastellen ausgegeben.

PHP:
// Durchschnitt berrechnen
$erg = 0;

$Anfrage = "SELECT SUM(vote) summe, COUNT(*) cnt FROM $tabl";
$vote = mysql_query($Anfrage) or die (mysql_error());

if($datensatz = @mysql_fetch_array($vote)){
	$erg = $datensatz['summe'] / $datensatz['cnt'];
}

print "Homepage Bewertung &Oslash; " . round($erg,2) . "<br /><br />\n";
 
Na siehste. :daumen:
Und bei vielen tausend Datensätzen merkt man dann auch schnell die Nachteile von Komplettdurchläufen wie whileschleifen. ^^
Meine Devise: Soviel wie möglich gleich von SQL berechnen lassen, das ist auf Masse optimiert.
 
Zurück
Oben