ich habe ein problem . Ich habe eine Datenbankansicht mit Elementen die in einer bestimmten Reihenfolge aneinanderhängen (SORTORDER).
Es ist eine Ansicht deshalb fehlt die Primäre ID.
FREMDID NAME SORTORDER
22 Name1 1
22 Name2 2
Beim Ändern der Reihenfolge (ersetze 1 durch 2 und 2 durch 1) gehe ich wie folgt vor:
Selektiere alle Datensätze mit FremdID = 22, Name = Name2 und SortOrder = 2 und ersetze Sortorder 2 durch 1.
Und dann habe ich 2 gleiche datensätze und das nächste Updatekommando würde dann beide Datensätze updaten und deren SortOrder auf 2 setzen.
Kann ich irgendwie bestimmen das er in einem solchen Fall nur 1 Datensatz ändern soll ohne den Hauptschlüssel mit reinzunehmen?
wie in jeder umgebung ohne einem entsprechenden swap-befehl:
zuerst 1 durch 3 ersetzen
dann 2 durch 1 ersetzen
zuletzt 3 durch 2 ersetzen
damit hast du 3 statements statt einem, funkt aber garantiert.
soweit so umständlich.
wenn du angeben würdest, welches db-system du verwendest, könnte man eine etwas komfortablere lösung anbieten.
im oracle z.b.:
update ansicht
set sortierkriterium = decode (sortierkriterium,1,2,1)
where sortierkriterium in (1,2);
also ein einzelnes update, das in einem rutsch alles umdreht. sollte auch unter anderen systemen ähnlich gehen. voraussetzung ist ein if-, case- oder sonstwas-statement.
es geht auch etwas verwirrender.
update ansicht
set sortierkriterium = abs(sortierkriterium - 3)
where sortierkriterium in (1,2);
die abs-funktion liefert den absoluten wert, also ohne vorzeichen.
ich habe ein problem . Ich habe eine Datenbankansicht mit
Elementen die in einer bestimmten Reihenfolge aneinanderhängen
(SORTORDER).
Es ist eine Ansicht deshalb fehlt die Primäre ID.
FREMDID NAME SORTORDER
22 Name1 1
22 Name2 2
Beim Ändern der Reihenfolge (ersetze 1 durch 2 und 2 durch 1)
gehe ich wie folgt vor:
Selektiere alle Datensätze mit FremdID = 22, Name = Name2 und
SortOrder = 2 und ersetze Sortorder 2 durch 1.
Und dann habe ich 2 gleiche datensätze und das nächste
Updatekommando würde dann beide Datensätze updaten und deren
SortOrder auf 2 setzen.
Kann ich irgendwie bestimmen das er in einem solchen Fall nur
1 Datensatz ändern soll ohne den Hauptschlüssel mit
reinzunehmen?
Unter Oracle würde ich - aus dem Handgelenk ohne Gewähr - ein
update tabelle
set sortorder = decode(sortorder,1,2,2,1,sortorder)
where fremdid=22
and ((name="name2" and sortorder=2) or
(name="name1" and sortorder=1))