Rechenoperarionen in PHP
Hallo ihr Administratoren,
ich möchte den Durchschnitt einer Bewertung errechen. Dazu brauche ich die Anzahl der Datensätze ($AnzahlDaten) und die Anzahl der Sterne, die pro Datensatz abgegeben wurden ($AnzahlSterne). Um den Durchschnitt zu berechnen, muss ich ja die gesamten Sterne durch die Anzahl der Datensätze dividieren. Meine Umsetzung in PHP:
Wenn ich mir jetzt die Variable $Durchschnitt ausgeben lasse, bekomme ich gar nichts angezeigt. Weder 0 noch irgendwas anderes, einfach gar nichts. Obwohl ich 8 Sterne bei 2 Datensätzen habe. Wo liegt hier der Fehler?
ich möchte den Durchschnitt einer Bewertung errechen. Dazu brauche ich die Anzahl der Datensätze ($AnzahlDaten) und die Anzahl der Sterne, die pro Datensatz abgegeben wurden ($AnzahlSterne). Um den Durchschnitt zu berechnen, muss ich ja die gesamten Sterne durch die Anzahl der Datensätze dividieren. Meine Umsetzung in PHP:
if($result1) {
$AnzahlDaten = 0;
while($row = $result->fetch_assoc()) {
$AnzahlDaten = $AnzahlDaten + 1;
$anz = (int)$row["AnzahlSterne"];
$AnzahlStarts = $AnzahlStars + $anz;
$Durchschnitt = $AnzahlStars / $AnzahlDaten;
}
}
Wenn ich mir jetzt die Variable $Durchschnitt ausgeben lasse, bekomme ich gar nichts angezeigt. Weder 0 noch irgendwas anderes, einfach gar nichts. Obwohl ich 8 Sterne bei 2 Datensätzen habe. Wo liegt hier der Fehler?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 328605
Url: https://administrator.de/forum/rechenoperarionen-in-php-328605.html
Ausgedruckt am: 22.12.2024 um 23:12 Uhr
6 Kommentare
Neuester Kommentar
Moin,
wäre es ggf. denkbar, dass dein RESULT die Variablen nicht füllt?
Oder kann es sogar sein, dass deine Schleife erst gar nicht "anspringt"?
Was passiert denn, wenn du innhalb der Schleife die Ergebnis mal mit echo $AnzahlStars und echo $AnzahlDaten ausgibst?
Das wäre zunmindest mal ein simples Debugging.
Gruß
em-pie
wäre es ggf. denkbar, dass dein RESULT die Variablen nicht füllt?
Oder kann es sogar sein, dass deine Schleife erst gar nicht "anspringt"?
Was passiert denn, wenn du innhalb der Schleife die Ergebnis mal mit echo $AnzahlStars und echo $AnzahlDaten ausgibst?
Das wäre zunmindest mal ein simples Debugging.
Gruß
em-pie
Fehler liegt hier:
Machst du ganz einfach: http://php.net/manual/de/mysqli-result.num-rows.php
btw, warum keine einfache SQL-Query um das direkt fertig abzufackeln??:
Gruß
$AnzahlDaten = $AnzahlDaten + 1;
Die Summe aller Datensätze sollte vor der Schleife ermittelt werden und nicht darin Machst du ganz einfach: http://php.net/manual/de/mysqli-result.num-rows.php
btw, warum keine einfache SQL-Query um das direkt fertig abzufackeln??:
SELECT AVG(AnzahlSterne) AS Durchschnitt FROM Bewertungen;
Guten Abend.
Es mag andere, für DIESEN Zwecke, bessere Methoden geben aber ein Fehlr ist das nicht.
So..
1. ich sehe da in Zeile 6 $AnzahlStarts, das ist ein Fehler.
2. Den Durchschnitt erst nach der Schleife berechnen weil du sonst mit jedem weiterem Schleifendurchlauf deinen bereits errechneten Durchschnittswert weiter teilst, da kommt doch kein sinnvoller Wert mehr bei raus.
Das ist ein zeiter Fehler.
~Arano
Zitat von @132272:
Fehler liegt hier:
Blödsinn, ein Fehler ist das absolut nicht !Fehler liegt hier:
$AnzahlDaten = $AnzahlDaten + 1;
Es mag andere, für DIESEN Zwecke, bessere Methoden geben aber ein Fehlr ist das nicht.
Die Summe aller Datensätze sollte vor der Schleife ermittelt werden und nicht darin
Nun... wenn die Summe / eine Summe aber abhändig von einer Eigenschaft der Datensätze ist... kann das doch auch in der Schleife geschehen.Machst du ganz einfach: http://php.net/manual/de/mysqli-result.num-rows.php
Das würde ich hier auch verwenden. Aber naja, viele Wege führen nach Rom, einige schneller, andere langsamer ;)btw, warum keine einfache SQL-Query um das direkt fertig abzufackeln??:
Statt nach dem "Warum" zu fragen, mach ihm doch einen freundlichen Verbesserungsvorschlag.> SELECT AVG(AnzahlSterne) AS Durchschnitt FROM Bewertungen;
>
Gruß
So..
1. ich sehe da in Zeile 6 $AnzahlStarts, das ist ein Fehler.
2. Den Durchschnitt erst nach der Schleife berechnen weil du sonst mit jedem weiterem Schleifendurchlauf deinen bereits errechneten Durchschnittswert weiter teilst, da kommt doch kein sinnvoller Wert mehr bei raus.
Das ist ein zeiter Fehler.
~Arano
Blödsinn, ein Fehler ist das absolut nicht !
Mit Fehler meinte ich hier die Position und die Art der umständlichen Ermittlung nicht das syntaktische . Deswegen auch der Link zur Alternative. Wenn sich die Gesamtanzahl dauernd ändert ist klar das es hier zu falschen Ergebnissen des Durchschnitts kommt,"wenn" die Berechnung fälschlicherweise in der Schleife geschieht statt danach.Statt nach dem "Warum" zu fragen, mach ihm doch einen freundlichen Verbesserungsvorschlag.
Genau der steht ja drunter , in Form einer SQL-Query die ihm das Berechnen des Durchschnitts schon in ser SQL-Query abnimmt. Die sollte er nun eigentlich selbst einsetzen können. Denke das er das schaffen sollte zumal er ja vorher auch irgendwo eine Query auf die DB gemacht hat.Etwas Gehirnjogging schadet ja nicht, zumal das ja nur eine simple Division aus der Grundschule ist.
Ist wohl das berühmte Brett vorm Kopf.
Gruß