MySQL: Zahl in einer Spalte summieren?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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:

  1. Person A betritt die Seite.
  2. PHP A zieht sich den alten Wert (sagen wir 100) aus der Datenbank.
  3. Person B betritt die Seite.
  4. PHP A war noch nicht fertig, PHP B zieht sich also den alten Wert (wieder 100) aus der Datenbank.
  5. PHP A addiert 1 und schreibt den neuen Wert (101) in die Datenbank.
  6. 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.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung

Meinst du einen Webseitenaufruf?

Woher ich das weiß:Studium / Ausbildung – Informatikstudent

korbi27 
Beitragsersteller
 09.11.2019, 21:55

Ja genau!

0
whgoffline  09.11.2019, 21:57
@korbi27

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();
?>
2