Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [MySQL] Multiple-Row-Update (https://www.delphipraxis.net/161775-%5Bmysql%5D-multiple-row-update.html)

Medium 20. Jul 2011 11:28

Datenbank: MySQL • Version: 4.1.9 • Zugriff über: UniDAC

[MySQL] Multiple-Row-Update
 
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ö!

Medium 20. Jul 2011 11:51

AW: [MySQL] Multiple-Row-Update
 
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!

p80286 20. Jul 2011 11:54

AW: [MySQL] Multiple-Row-Update
 
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

omata 20. Jul 2011 12:22

AW: [MySQL] Multiple-Row-Update
 
Zitat:

Zitat von p80286 (Beitrag 1112698)
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)

Medium 20. Jul 2011 12:48

AW: [MySQL] Multiple-Row-Update
 
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 :)

p80286 20. Jul 2011 16:02

AW: [MySQL] Multiple-Row-Update
 
Man lernt nie aus

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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