AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [MySQL] Multiple-Row-Update
Thema durchsuchen
Ansicht
Themen-Optionen

[MySQL] Multiple-Row-Update

Ein Thema von Medium · begonnen am 20. Jul 2011 · letzter Beitrag vom 20. Jul 2011
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#1

[MySQL] Multiple-Row-Update

  Alt 20. Jul 2011, 11:28
Datenbank: MySQL • Version: 4.1.9 • Zugriff über: UniDAC
Mahlzeit!

Ich müsste in einer Tabelle mehrere Spalten mehrerer Datensätze in einem Statement updaten. Wie das prinzipiell geht habe ich hier her, und das tut an sich auch prima. Allerdings behandelt der Artikel nicht den Fall, dass ggf. nicht alle Cases alle vorkommenden "id"s auflisten könnten. Beispiel:
Code:
UPDATE `mytable` SET
  `color` = CASE id
    WHEN 2 THEN 255 
  END,
  `position` = CASE id
    WHEN 1 THEN 5 
  END
Das setzt in der Tat die Spalte "color" in der Zeile mit id 2 auf 255 und die Spalte "position" in Zeile 1 auf 5. Aber! Es setzt leider auch die "position" in Zeile 2 und "color" in Zeile 1 auf 0. Ich möchte jedoch die nicht vom CASE erfassten Fälle unverändert lassen. Ich hätte das auch so erwartet, aber MySQL scheint mich erneut überraschen zu wollen.
Das ist ein Minimalbeispiel da oben, es können auch gut und gerne Kombinationen von ein paar zig Zeilen und Spalten bunt gemischt auftauchen, so dass das "aufblähen" aller CASEs auf alle IDs eher unschön wäre. Gibt's da nicht einen hübschen Schalter oder eine Option, wie man dieses Verhalten etwas erwartungsgemäßer bekommt?

Dankschö!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: [MySQL] Multiple-Row-Update

  Alt 20. Jul 2011, 11:51
Okay, selbst drauf gekommen. Letztlich simpel:
Code:
UPDATE `mytable` SET
   `color` = CASE id
     WHEN 2 THEN 255 
     ELSE `color`
   END,
   `position` = CASE id
     WHEN 1 THEN 5 
     ELSE `position`
   END
Sorry!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: [MySQL] Multiple-Row-Update

  Alt 20. Jul 2011, 11:54
Warum machst Du es nicht auf die einfache Tour
Code:
Update myTable Set Color=255 where id=1;
Update myTable Set position=255 where id=2;
Damit hast Du auch wildeste Kombinationen im Griff. Nicht sehr elegant, aber problemlos nachvollziehbar.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: [MySQL] Multiple-Row-Update

  Alt 20. Jul 2011, 12:22
Warum machst Du es nicht auf die einfache Tour
Bei deinem Vorschlag ist aber die Reihenfolge der Updates zu beachten! (Falls da mal mehr auf der selben Spalte dazukommen)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: [MySQL] Multiple-Row-Update

  Alt 20. Jul 2011, 12:48
So ein paar hundert Updates pro Sekunde dauern einfach zu lange, ein einzelnes Statement ist dagegen ziemlich flott durch. Auch muss etwas weniger übers Netz gepumpt werden, dass ohnehin schon anderweitig auch gut Traffic bekommt.
Noch flotter wird das ganze, wenn man noch mit einem "WHERE id IN (1, 2)" die Sätze einschränkt, die gegen die CASEs geprüft werden. Reine Performanceentscheidung gewesen
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: [MySQL] Multiple-Row-Update

  Alt 20. Jul 2011, 16:02
Man lernt nie aus

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz