PHP Berechnung aus MySQL-Tabelle

tobi.wld

Lt. Junior Grade
Registriert
Dez. 2020
Beiträge
268
Hi zusammen, ich arbeite derzeit an einer Web-Anwendung die als Digitales Fahrtenbuch fungieren soll.
Das ganze schreibe ich in PHP und im Huntergrund existiert eine MySQL-Datenbank.

In diese schreibe ich den Endkilometerstand, den Fahrer sowie den Zweck der Fahrt, also relativ einfach gehalten.

Nun habe ich das Problem dass ich in meiner Web-Oberfläche die Gefahrenen km ausgeben möchte. Dafür gehe ich mit PHP durch die Ergebnisse durch aber bekomme nicht das passende Ergebnis. Ich glaube ich stehe gerade ziemlich auf dem Schlauch und eventuell weiß ja von euch jemand was ich falsch gemacht habe.

Das ist mein Code:
PHP:
function printEntrys($servername, $username, $password, $dbname)
        {
            $conn = new mysqli($servername, $username, $password, $dbname);
            if ($conn->connect_error) {
                die("Connection failed: " . $conn->connect_error);
            }
            $sql = "SELECT end_kilometers, driver, purpose FROM tbl_driverslog ORDER BY insert_id DESC";
            $result = $conn->query($sql);
            if ($result->num_rows > 0) {
                $counter = 0;
                $end_kilometers_old = 0;
                while ($row = $result->fetch_assoc()) {
                    $counter += 1;
                    $end_kilometers = $row['end_kilometers'];
                    $driver = $row['driver'];
                    $purpose = $row['purpose'];
                    if ($counter == sizeof($row)) {
                        echo "<tr><td>$end_kilometers</td><td>$driver</td><td>$purpose</td><td>N/A</td></tr>";
                        $end_kilometers_old = $end_kilometers;
                    } else {
                        $driven_km = $end_kilometers - $end_kilometers_old;
                        echo "<tr><td>$end_kilometers</td><td>$driver</td><td>$purpose</td><td>$driven_km</td></tr>";
                        $end_kilometers_old = $end_kilometers;
                    }
                }
            }
            $conn->close();
        }

Das kommt in der Tabelle raus:
1675866853581.png
 
..um zB Monate zu kummulieren wirde mann ein Datum mit MONTH() reduzieren dann je Monat MIN/MAX bestimmen und rechnen (update - @madmax2010 via Windowing Funktion hat viel mehr Charme aber ob das der TE auch versteht...)

P.S. die Treffermengen via PK absteigend sortieren würde ich zugunsten eines echten Datums nochmal zum Nachdenken anregen
 
Wäre es nicht sinnvoller beim Eintragen der Fahrten bereits die Gefahrenen Km berechnen zu lassen und den Wert ebenfalls in die Datenbank zu schreiben, statt es beim abrufen berechnen zu lassen. Besonders bei großen Datenbestand klingt das nicht sehr performant.

Ansonsten zum Code kein Plan von PHP. Aber deutet man die Ergebnisse tritt die If Bedingung nicht ein.

Im else Block ist dann der Wurm drin, somit bleibt im ersten durchlauf der Wert von Kilometers old 0 und bei Minus 0 ändert sich nix und dann geht's immer falsch weiter.

Sprich hier musst du ansetzen.

Ansonsten hast du ja Alternativen bereits erhalten
 
  • Gefällt mir
Reaktionen: Rick Sanchez
Zurück
Oben