11 Stimme

MySQL: Update nur wenn vorher bestimmter Wert in Feld

Frage von GoldStock | 21.03.2012 um 22:24

Ich habe ein kleines Problem mit einer Datenbank Abfrage in MySQL. Und zwar möchte ich mit UPDATE ein Wert in einem Feld ändern. Eine Änderung soll aber nur durchgeführt werden, wenn in dem Feld vorher ein bestimmter Wert steht. Ansonsten soll der alte Wert beibehalten werden.

Beispiel: Ich möchte das Feld 'foo' in der Tabelle 'nutzer' beim Nutzer mit id=10 auf 3 setzen, wenn das Feld vorher auf 2 stand. Ansonsten soll in dem Feld der vorherige Wert stehen bleiben, da die Werte nicht kleiner sondern nur größer werden sollen.

AntwortenPositivNegativ
2Beste Antwort2 Stimmen

Du kannst in MySQL IF-Anweisungen verwenden, um so einen Fall zu managen. Um dein Beispiel aufzugreifen:

UPDATE nutzer SET foo=IF(foo=2,3,foo) WHERE id=10

Hinter unserem 'foo=' steht eine IF-Anweisung. Wenn 'foo=2' gilt, dann wird die erste Alternative nach dem ersten Komma verwendet (die 3 wird in das Feld geschrieben). Wenn 'foo=2' nicht gilt, wird die zweite Alternative hinter dem zweiten Komma genommen, also foo und damit der alte Wert des Feldes. Das ist wichtig extra zu erwähnen, sonst steht hinterher gar kein Wert in dem Feld.

Du hast auch geschrieben "damit die Werte nicht kleiner werden". Vielleicht ist daher auch diese Anweisung für dich interessant:

UPDATE nutzer SET foo=IF(foo<3,3,foo) WHERE id=10

Damit wird foo auf 3 gesetzt, sobald foo vorher kleiner als 3 war. Also wird foo auch auf 3 gesetzt, wenn vorher 0 oder 1 in dem Feld standen und nicht nur, wenn dort vorher eine 2 stand.
22.03.2012 um 21:10

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.