AVG Berechnung in mysql

  • moin, ich habe vielleicht momentan ein Brett vorn Kopf.
    Wie kann ich mit php eine - in einer Funktion errechneten Durchschnittswert - weiter verarbeiten?


    Functionen.php
    <?php
    function durchschnitt($name, $anfang, $ende){
    $link=mysql_connect ......
    mysql_select_db(......
    $query = "SELECT AVG(Gehalt) FROM Lohnsteuer WHERE name = ". $name ." AND Zeit >=" . $anfang . " AND Zeit <=" . $ende ." ORDER BY Zeit";
    $ergebnis = mysql_query($query);
    }
    ?>


    Durchschnitt.php
    <?php
    include ('Funktionen.php');
    $result= durchschnitt('Heinrich', '01.01.2014', '01,08,2014');
    ?>

  • Hi,
    3 Dinge:
    1) Es gibt hier den BB-Code

    Code
    [code=php]

    [/code]. Der hilft uns ungemein, deinen Code besser zu überblicken. Für mehr, guckst du da: Code lesbar präsentieren


    2) Das Ergebnis ist dann in der Variable $result gespeichert, falls man auf die Dateinamen achtet. So, wie es da steht, kann es nicht klappen, da du die Datei Funktionen.php einbinden willst, diese aber Functionen.php heißt.
    Ansonsten einfach die Variable als Zahl ansehen, in diesem Fall. Oder null, wenn nichts zurückgeliefert werden kann.


    3) Heutzutage wird von den klassischen MySQL(i) Funktionen eher abgeraten, da man dort sehr leicht Hintertürchen für sog. SQL Injections (BÖSE!!!) übersehen kann. Zum üben und dem grundlegenden Verstehen ist es gut, falls das aber eine öffentlich erreichbare Seite werden soll, würde ich dir PDO empfehlen. Ist zwar ein wenig umdenken, dafür aber wesentlich sicherer.

  • Was The Scout sagte plus: die Funktion "durchschnitt" muss den Wert zurückgeben (return $ergebnis)


    plus:


    Evtl hast Du da was beim Format verdattelt.

    PHP
    $result= durchschnitt('Heinrich', '01.01.2014', '01,08,2014');


    01.01.2014 und '01,08,2014 (punk und komma) wird so nicht funktionieren.


    Was hast Du beim Datum für ein Format verwendet?
    Ich tippe auf DATE. Dann ist das Format: JAHR-MONAT-TAG - also 2014-06-24 zB


    Das hier sollte funktionieren:

    PHP
    SELECT 
    	AVG(`Gehalt`) AS `durchschnitt`
    FROM 
    	`Lohnsteuer` 
    WHERE 
    	`name` = ". mysql_real_escape_string($name) ." 
    	AND `Zeit` >= ". mysql_real_escape_string($anfang) ." 
    	AND `Zeit` <= ". mysql_real_escape_string($ende) ." 
    ORDER BY `Zeit`


    Du kanst auch BETWEEN verwenden, wobei das Wort an sich mMn falsch gewählt ist. Denn BETWEEN wählt "inklusive" aus.
    Man könnte denken "... WHERE `zahl` BETWEEN '1' AND '5' " wählt alle Werte zwischen 1 und 5 aus.
    Allerdings (siehe doku)

    Zitat

    Wenn expr größer oder gleich min und expr kleiner oder gleich max ist, gibt BETWEEN 1 zurück, andernfalls 0.


    PHP
    SELECT 
    	AVG(`Gehalt`) AS `durchschnitt`
    FROM 
    	`Lohnsteuer` 
    WHERE 
    	`name` = ". mysql_real_escape_string($name) ." 
    	AND `Zeit` BETWEEN ". mysql_real_escape_string($anfang) ." AND ". mysql_real_escape_string($ende) ."
    ORDER BY `Zeit`

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!