Mysql Einträge mit Zahl Sortieren

hi

ich habe ein menü in der datenbank gespeichert, die einträge sollten jedoch in einer bestimmten reihenfolge angezeigt werden. jetzt hab ich ne sortierung-spalte angelegt mit zahlen.

jetzt wollte ich fragen wie ich das mit derw menü verwaltung am besten hinbekomme, das keine zahlen doppelt vorkommen oder fehlen, also das alles neu durchnumeriert wird wenn ich nur weiß welcher eintrag vor einem anderen stehen soll.

mfg bosz4 und danke im vorraus

Kannst du deine Frage bitte besser formulieren?

Zb. nach was soll das Sortiert sein(id?!)?

also ich habe ein seitenmenü wo ich über mysql die links verwalten kann und eine spalte “sortierung” wo die zahlen nach denen die einträge geordnet werden sollen gespeichert werden.

ansonsten könnte ich sie ja nur in der reihenfolge ordnen lassen in der ich die einträge gespeichert habe.

order by sortierung,einfach dranhängen :wink:

ja das weiß ich ja, mir geht es nur um die menü verwaltung, denn man sollte auch von php aus das menü ändern können und auch die reihenfolge, ich will wissen wie ich das hinbekomme wenn ich z.B. zwei einträge vertauschen will oder was ich machen muss wenn ich einen neuen eintrag zwischen zwei einschieben will.

Ich schätze, erst mal musst du alle Einträge auslesen, am besten schon sortiert. Dann fängst du an, die Ordnungszahlen neu zu vergeben. Wenn ein Eintrag manuell eine neue Zahl bekommen hat, werden bei den darauffolgenden die zahlen um eins erhöht. Am Ende führst du dann ein UPDATE für jeden geänderten Eintrag aus.

Nein, dazu muss man nicht alles auslesen und dann auch noch einzeln updaten.

Mehrere Datensätze lassen sich mit einem Update neu nummerieren,

Den Bereich, in dem man das Update durchführt, grenzt man dann noch per WHERE-Klausel sinnvoll ein.

Um dabei abzufangen, dass eine unique key/index-Verletzung auftritt, wenn sich der neu zu nummerierende Bereich mit dem Wert des Datensatzes, dessen Position verändert werden soll, überschneidet, kann man diesen bspw. vorher auf -1 setzen. Dann vorherige bzw. nachfolgende Datensätze (je nachdem, ob nach oben oder unten verschoben wird) neu nummerieren, und dann Zieldatensatz von -1 auf endgültigen Wert setzen.

Es empfiehlt sich natürlich, das ganze in eine Transaktion zu kapseln, um Inkosistenzen als Folge ggf. auftretender Fehler zu vermeiden.

Und wenn man sich die ganze Logik einer solchen Sache nicht gleich im Kopf vorstellen kann, dann hilft es auch, sich das erst mal mit ein paar Beispieldaten auf einem Blatt Papier aufzumalen. (Das kann man übrigens auch schon machen, bevor man fragt - in vielen Fällen erübrigt sich dann das Fragen dadurch gleich von selber.)