[PHP/MySQL] Wert überprüfung

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

kann mir mal schnell jemand auf die Sprünge helfen?
Folgendes bereitet mir Probleme.

Ich habe zwei Spalten (ID & POSITION).
ID ist auto_increment und Positioin ist INT...

Das Feld in Position wird so belegt, dass immer bei 0 angefangen wird und dann der Reihe nach aufwärts... Also immer der letzte Wert + 1.
So habe ich eine Reihenfolge die von 0 bis X geht...

Wenn ich nun mittendrin eine Position ändern möchte, dann soll das Script überprüfen ob die Position schon vorhanden ist und ggf. mit der nächst höheren Ersetzen. Das heißt, alle nachfolgenden sollten dan um eine Position erhöht werden. Lücken sollten dann natürlich geschlossen werden. Nun soll der eigentliche Eintrag geupdatet werden....

Trtotz eines Ablaufplans, bekomme ich das einfach nicht umgesetzt.
Hat jemand eine Idee oder vielleicht einen Code-Schnipsle oder Funktion, die soetwas erledigt ?


Wäre euch sehr dankbar !


Mit freundlichen Grüßen
Papenburger
 
einfach alle um einen erhöhen


wenn du 5 einfügst dann

update table set reihenfolge=reihenfolge+1 where reihenfolge>5

Lücken sollten gar keine entstehen, wenn du Löscht, dann mußte halt so machen, das alle runterrücken,
 
Code:
UPDATE .... SET foo = foo + 1 WHERE id > ...
Du musst nur vorher die Grenze finden.

Und eine persönliche Notiz: Glaubst du nicht, dass da irgendwas ganz gewaltig falsch läuft, wenn du alle möglichen Datensätze von Hand "nachkorrigieren" musst? :roll:
 
einfach alle um einen erhöhen


wenn du 5 einfügst dann

update table set reihenfolge=reihenfolge+1 where reihenfolge>5

Lücken sollten gar keine entstehen, wenn du Löscht, dann mußte halt so machen, das alle runterrücken,

Genau das ist mein Problem:
ID|POS
0|1
1|2
2|3
3|4
Wenn ich nun Position 4 auf 2 ändern will, muss Position 2 und alle nachfolgenden, mit ausnahme der 4. Position um eines erhöht werden...

Wenn ich nun aber Position 2 auf 4 Setzen will, muss Position 3 zu 2 und 4 zu 3 werden. Und das bekomme ich nicht hin oder ich hab irgendwo nen Denkfehler....
 
Zuletzt bearbeitet von einem Moderator:
Du musst nur vorher die Grenze finden.
Mit MIN() und MAX() müsste das doch gehen oder nicht?

Und eine persönliche Notiz: Glaubst du nicht, dass da irgendwas ganz gewaltig falsch läuft, wenn du alle möglichen Datensätze von Hand "nachkorrigieren" musst? :roll:
Nein, das ist so gewollt. Möchte ja Positionen vergeben und wie in Joomla updaten/speichern können!

edit:
Für tabellarische Daten bitte in Zukunft table-Tags benutzen. Danke.

Hab ich nicht dran gedacht, dass es soetwas gibt...
Sorry !
 
du mußt halt dir die Position die du änderst merken, alle anderen verschieben und dann die position von dem gemerkten (du hast och die id), dann ändern.

Also das ist eigentlich recht simpel, naja vielleicht sagt man (ich) das so leicht, weil ich ja auch bublesort etc. shcon mal mplementieren mußte, was schon fast in die richtung geht...

ein bischen nachdenken dann klappt das schon.
 
Also das ist eigentlich recht simpel, naja vielleicht sagt man (ich) das so leicht, weil ich ja auch bublesort etc. shcon mal mplementieren mußte, was schon fast in die richtung geht...
Bubblesort damit zu vergleichen ist schon geil :LOL:

K, mal mein Ansatz:
  • Wir haben 14 Elemente mit der Nummerierung 1...14
  • Wir verschieben das Element 4 auf den Platz 2
    1. Setze Element 4 auf Element 0
      • (wir haben eine Nummerierung 0...3 und 5...14)
    2. Dekrementiere alle Werte > 4 um 1
      • (wir haben eine Nummerierung 0...13)
    3. Inkrementiere alle Werte >= 2 um 1
      • (wir haben eine Nummerierung 0...1 und 3...14)
    4. Verschiebe Element 0 auf Element 2

Bingo, fertig !
 
naja bubbl sort ist doch auch ein hin und her geschiebe, von mir aus auch insertion-sort oder ähnliches.

Ich würde bei deinem Beispiel eher machen
4-->0
alles >=2 und <4 incrementieren, 0-->2

Mal nicht von 15 sondern von 1 Mio ausgehen, da würde ich ja 2 mio zeilen (2*1mio) ändern statt nur 4 ändrungen.