2016-04-06 6 views
1

Ich habe eine MySQL-Tabelle mit "Position" Zeile. Grundsätzlich eine Reihe von Datensätzen mit eigenen ID-, Beschreibungs- und Titel- (und Positions-) Zeilen.MySQL, PHP: Wie "slide down" Datensätze nach bestimmten Zeile?

Position ist für jeden Datensatz eindeutig und keine zwei Datensätze können dieselbe Position haben. Wenn Sie neue Datensätze erstellen, wird die Position erstellt, indem Sie den maximalen Positionswert auswählen und 1 hinzufügen.

Das Problem ist, wenn Sie löschen einen Datensatz eine Position "Lücke" Formen in der Tabelle. Lassen Sie uns sagen, Datensätze hatten 1, 2, 3, 4, 5 Positionswerte, Sie löschen die 4. und es wird 1, 2, 3, 5.

Ich möchte diese Zeile "gleiten", so dass es 1 wird, 2, 3, 4. Wenn der zweite Datensatz gelöscht wurde, sollte er 1, 2, 3 (statt 1, 3, 4) werden.

Auch wenn es viel komplizierter Positionsstapel wie 1, 3, 2, 4, 5, 6, _, 8 ist, wo _ gelöscht wird, dann sollte es die ungeordneten 1, 3, 2, 4 Teile und werden 1, 3, 2, 4, 5, 6, 7.

enter image description here

+0

1. Verwenden Sie einen Primärschlüssel 2. Ohne Primärschlüssel haben Sie Nebenläufigkeitsprobleme 3. Warum möchten Sie fortlaufende Nummern? – Mihai

+0

@Mihai Ich habe bereits ID als Primärschlüssel. –

+0

@Mihai Es gibt eine Reihe von Elementen (Datensätze), die auf der Website über PHP angezeigt wird ('SELECT * FROM 'Produkte' WHERE ('Position'> =". $ Start. ") UND ('Position' <". $ offset. ") ORDER BY 'Position' ASC"; '). Sie können eine Position eines bestimmten Elements festlegen, aber nur, wenn eine neue Position belegt ist (ein Austausch mit einem anderen Element). –

Antwort

0

Wenn Sie die Position löschen Sie den Wert kennen (die Position Sie löschen) .Dann alle Werte zu holen, nach dem insbesondere & Position, die Sie gelöscht haben, verringern sich um 1. i. Wenn Ihr Stack 1,2,3,4,5,6,7,8,9 & ist, löschen Sie 7, dann zählen Sie den Gesamtstapel, der = 9 ist, jetzt für() loop, beginnend mit 7: update table set Position = Position-1, wo Position = 7.

Aber es ist keine gute Lösung.