Einträge in einer MySQL DB verschieben - IDs vertauschen?

mordi

Mitglied
Hiho! ;-)

Ich möchte eben mal mein Problem erläutern:
Ich sitz grad daran, eine Navigation mit Admin-Panel zu programmieren, sprich: man soll menüpunkte hinzufügen, editieren und löschen können.
so weit funktioniert auch alles, doch beim verschieben der menüpunkte habe ich ein problem. wenn ich zum beispiel "home" an 1. und "bla" an 2. stelle habe, will ich "home" an 2. und das andre an 1. haben... also "bla" nach oben verschieben.
ich dachte mir, ich könnte das so managen, dass ich einfach die IDs tausche. auch das funktioniert soweit, aber wenn ich vorher einen punkt gelöscht hatte, dann entsteht ja eine lücke. überhaupt entstehen ja eine menge lücken, wenn man autoincrement benutzt...

meine frage: wie verschiebe ich einträge, wenn davor oder danach eine lücke ist?

ich hoffe, man konnte es einigermaßen verstehen...
über einen rat würde ich mich sehr freuen!

dankeschön schonmal,
mordi :)
 
hmm...
füge doch einfach eine neue spalte (am besten unique) hinzu, in der steht, an welcher stelle der menüpunkt steht. dann bist du nicht auf die auto_increment -variable angewiesen.
 
Ich hab dein problem nicht ganz verstanden, daher weiss ich nich so richtig, ob dir das weiterhilft:

Ich würd ganz spontan mal vorschlagen, dass du im mysql ein "order" feld zu deinem menu table hinzufügst. Also so irgendwie:

ID | NAME | MENU_ORDER
1 | Home | 1
2 | Punkt 2 | 2
3 | Punkt 3 | 3

und dann im script die daten in ner schleife aus der datenbank hohlen mit "ORDER BY menu_order ASC" am ende des querys. Dann kannst du beliebig die Order-zahl verändern, die kleinste zahl würde in diesem fall an erster stelle stehen.

ID's tauschen würd ich nich empfehlen. Ich glaub du solltest dein script noch mal n bisschen überdenken.
 
was is an meiner variante deiner idee eigendlich so abstrakt? Den einzigsten unterschied den ich seh is dass ich kein unique machen würde, da ich wahrscheinlich mehrere menus der gleichen hätte und desswegen öfters mal eine 1 oder so haben würde.
 
nein... mißverständnis.

meins war abstrakter, da ich nur den weg bzw die art und weise der lösung beschrieben habe.
deins war konkret, da du eine tabelle illustriert hast und schon spaltennamen vergeben hast usw...

abstrakt und konkret in ihrer grundbedeutung eben.
 
einfacher!

auto_increment raus (unique only) und dann:

Code:
SELECT * FROM tabelle WHERE id < $vorherige_id LIMIT 0,1

damit wählst du den da drüber aus, wenn dus jetzt vertauschen willst -> spalte mit $vorherige_id auf 9999 setzen und die dadrüber/dadrunter auf die id von vorherige_id setzen und dann vorherige_id spalte auf den wert der dadrunter/dadrüber tabelle.

w:-(rd up!
 
Zurück