PHP: Wie kann ich Werte bei einer while-Schleife mit Datenbank addieren?
Code :
$mysqli=new mysqli("localhost", "XXX", "XXX", "XXX");
$query="SELECT * FROM Datenbank WHERE userid = " . $id . "";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
printf("".$row['clicks'] . " normale aufrufe, " . $row['clicks_mobile'] . " von mobile. insgesamt " . $row['clicks'] . " + ". $row['clicks_mobile']." .<br><br>", $row["clicks"], $row["clicks_mobile']);
}
}
$mysqli->close();
Doch bei insgesamt steht einfach 69+12. Es soll aber addiert werden. Wie geht das?
3 Antworten
Addiere es doch direkt in der Datenbank, das spart auch Performance:
$query="SELECT *, (clicks + clicks_mobile) AS clicks_gesamt FROM Datenbank WHERE userid = " . $id . "";
Ausgeben kannst Du das dann per
$row["clicks_gesamt"]
Beachte, dass Du auch auf das Auslesen per "*" im SELECT-Statement verzichten solltest. Gib konkret die Spalten an die Du auslesen willst. Das bringt ebenfalls etwas Performance, vor allem bei großen Tabellen und Statements.
$row['clicks']."+".$row['clicks_mobile']
Sollte das nicht eher
intval(.$row['clicks']) + intval(.$row['clicks_mobile'])
heißen?
intval(), da ich denke, dass der Rückgabewert ein String ist und keine Zahl und normalerweise bei dem Addition Operator bei einem String einfach der String hinten dran gehangen wird.
Es geht um den Rückgabe Wert von fetch_assoc(). Ich weiß nicht, in welchem Datenformat es gespeichert ist.
Edit:
Returns an associative array of strings representing the fetched row in the result set, where each key in the array represents the name of one of the result set's columns or NULL if there are no more rows in resultset.
So stehts im MySQL Doc drin, daher gehe ich davon aus, dass alle Werte in dem Array Strings sind und entsprechend noch in den entsprechenden Datentyp geparsed werden.
Doch, du kriegst nur Strings aus der Datenbank. Die Werte ins Programm übernehmen, in Integer umwandeln und dann kansnt du diese addieren
1) Nutze Prepared Statements.
2) Aus der Dokumentation:
Returns an associative array of strings representing the fetched row in the result set, (...)
Zudem packst du das Pluszeichen ja auch noch in einen String und konkatenierst. Also:
$clicks = intval($row['clicks']) + intval($row['clicks_mobile']);
/* ... */ insgesamt $clicks /* ... */
3) Wieso setzt du printf ein, nutzt diese Funktion aber nicht richtig? Lies auch hier die Dokumentation genauer.
printf("%s normale Aufrufe, %s von mobile. Insgesamt %d <br><br>", $row['clicks'], $row['clicks_mobile'], $clicks);
ne ist int