MySQL: Zahl in einer Spalte summieren?
Schönen guten Abend!
Ich möchte bei einem Seitenaufruf in einer Spalte Count einer MySQL Datenbank immer den Wert '1' dazu addieren.
Mir fehlt nur das Wissen, wie man mathematische Additionen in einer Datenbankspalte durchführt...
Würde mich sehr über nh Code-Beispiel freuen
LG
3 Antworten
Schreibe dir ein UPDATE-Query:
UPDATE table SET count = count + 1 WHERE ...
Für WHERE könntest du den Auto_Increment-Index abfragen oder bspw. nach dem Datensatz suchen, bei dem die Count-Spalte ungleich -1 ist.
Die Antwort von CrEdo85wiederDa ist nicht richtig. Natürlich kannst du direkt in der Datenbank addieren - das solltest du in diesem Fall sogar auch. Der Umweg über eine Programmiersprache, welche den alten Wert holt, und dann überschreibt, ist nicht nur überflüssig, sondern kann auch zu Dateninkonsistenz führen.
Denkaufgabe:
- Person A betritt die Seite.
- PHP A zieht sich den alten Wert (sagen wir 100) aus der Datenbank.
- Person B betritt die Seite.
- PHP A war noch nicht fertig, PHP B zieht sich also den alten Wert (wieder 100) aus der Datenbank.
- PHP A addiert 1 und schreibt den neuen Wert (101) in die Datenbank.
- PHP B addiert 1 und schreibt den neuen Wert (101) in die Datenbank.
Und schon ist 1x hoch zählen verloren gegangen.
Wenn du jedoch direkt in der Datenbank mittels SQL addierst (siehe regex9), hast du dieses Problem nicht, da das Holen des Wertes, das Summieren, und das Schreiben des Wertes in einer Query passieren. Und da MySQL jede Query einzeln arbeitet, wirst du ein Problem wie oben nicht bekommen.
Sowas ist natürlich nur relevant bei kritischen Zahlen und bei entsprechenden Read/Write Speeds, aber ich bin da der Meinung, wenn man es schon macht, dann auch bitte richtig.
Meinst du einen Webseitenaufruf?
Also mit php geht das easy
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE DEINETABELLE SET Count=Count+1 WHERE id=deineid";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
?>
Ja genau!