tk: Datenbank-Werte mit übergebenen Form-Werten vergleichen

Beitrag lesen

Moin,

Ich sitze seit Stunden an einem Problem, das ich einfach nicht lösen kann: Ich möchte, dass beim Schreiben in die DB überprüft wird, ob eine Reihe mit einer bestimmten ID bereits vorhanden ist und wenn ja, soll diese aktualisiert werden, ansonsten soll eine neue Reihe erstellt werden.

Das klingt – vorausgesetzt du verwendest MySQL/MariaDB[1] und auf den IDs liegt ein Unique-Index o.ä. – nach einem Fall für INSERT … ON DUPLICATE KEY, etwa so:

INSERT INTO tabelle (id, value) VALUES (:id, :value) as new
  ON DUPLICATE KEY UPDATE value = new.value;

Dein doppeltes foreach brauchst du dann natürlich nicht und :id/:value sind Platzhalter für prepared Statements. Zu klären wäre natürlich noch was passieren soll wenn ein Wert 0 ist (dann müsste der Datensatz ggf. gelöscht werden).

Gruß
Tobias


  1. das ist kein SQL-Standard deswegen nur MySQL/MariaDB - andere DBMS haben aber wohl ähnliche Lösungen dafür, Postgresql z.B. INSERT … ON CONFLICT ↩︎