Hallo Forum,
Ich habe grade ein kleines Problem, was ich zwar lösen kann, wo ich mich aber frage, ob das nicht eleganter geht.
Auf ein Minimalbeispiel runtergebrochen sähe es etwa so aus:
Tabelle sequence speichert die Reihenfolge in der Dinge angeordnet sein sollen:
sequence: SeqNr | thingid
SeqNr ist dabei der Primärschlüssel und läuft von 0 bis N-1 durch.
Nun zeige ich die Sequenz an und will dem Nutzer die Möglichkeit geben, ein Ding in der Liste rauf/runterzuschieben. Ich bekomme also vom user den Input: Schiebe Ding mit SeqNr <n> einen rauf/runter.
Ich kann jetzt nicht einfach SeqNr <n> in der Tabelle um 1 verringern, denn dann gäbe es ja zwei Einträge mit SeqNr <n-1>, was nicht geht, da SeqNr der Primary Key ist. Ich muss also die thingids tauschen: Erst ThingId zu SeqNr <n> und <n-1> holen (SELECT) und dann die beiden wieder schreiben (UPDATE). Im schlimmsten Falle also 1 SELECT + 2 UPDATEs.
Die Frage ist nun ob das schneller/eleganter geht. Ich kenne viele der Kniffe von MySQL nicht (die lerne ich häufig durch mitlesen hier
), daher meine Hoffnung, dass es da was geeignetes gibt. Gabs da nicht mal was wie man UPDATE mit Werten aus einem SELECT füttern kann? Ich bekomms jedenfalls nicht zusammen. Danke schonmal.
Ich habe grade ein kleines Problem, was ich zwar lösen kann, wo ich mich aber frage, ob das nicht eleganter geht.
Auf ein Minimalbeispiel runtergebrochen sähe es etwa so aus:
Tabelle sequence speichert die Reihenfolge in der Dinge angeordnet sein sollen:
sequence: SeqNr | thingid
SeqNr ist dabei der Primärschlüssel und läuft von 0 bis N-1 durch.
Nun zeige ich die Sequenz an und will dem Nutzer die Möglichkeit geben, ein Ding in der Liste rauf/runterzuschieben. Ich bekomme also vom user den Input: Schiebe Ding mit SeqNr <n> einen rauf/runter.
Ich kann jetzt nicht einfach SeqNr <n> in der Tabelle um 1 verringern, denn dann gäbe es ja zwei Einträge mit SeqNr <n-1>, was nicht geht, da SeqNr der Primary Key ist. Ich muss also die thingids tauschen: Erst ThingId zu SeqNr <n> und <n-1> holen (SELECT) und dann die beiden wieder schreiben (UPDATE). Im schlimmsten Falle also 1 SELECT + 2 UPDATEs.
Die Frage ist nun ob das schneller/eleganter geht. Ich kenne viele der Kniffe von MySQL nicht (die lerne ich häufig durch mitlesen hier