2016-08-25 2 views
0

Ich bin auf der Suche nach einer Lösung, um einen Beitrag zwischen zwei Beiträge hinzufügen und speichern Sie die neue Bestellung in der Datenbank.Aktualisierung der Beiträge 'Auftrag mit einer SQL-Abfrage

Ich habe die Bestellunterstützung für reguläre Posts hinzugefügt und ich plane, dieses Feld zu verwenden, um die Posts auf einer Seite zu bestellen. Die neuen Posts werden von der gleichen Seite über AJAX erstellt. Alle Beiträge haben denselben Elternteil. So

ich habe:

  1. Posta
  2. PostB
  3. postc

Nun würde Ich mag einen neuen Beitrag (PostD) zwischen Posta und PostB erstellen. So würde die neue Ordnung

  1. Posta
  2. PostD
  3. PostB
  4. postc sein

so die Bestellnummer hätte Beiträge B und C und PostD aktualisiert werden soll, zugeordnet mit Bestellnummer 2, wenn das neue PostD gespeichert wird.

Ich frage mich, was wäre die beste Lösung dafür. Vielleicht könnte ich eine SQL-Abfrage machen, die so etwas tun würde:

alle Posts mit Post Eltern XX und mit Bestellnummer> = neue Postnummer und fügen +1 zu diesen Posts 'Bestellnummern.

Jede Hilfe wird sehr geschätzt werden, danke!

+0

See-Transaktionen. Schritt 1. Aktualisieren Sie die Bestellreferenz jeder Zeile mit einer Bestellreferenz> = 2. Schritt 2. Fügen Sie die neue Zeile ein. Ich nehme an, dass die Post-Spalte Ihr PRIMÄRSCHLÜSSEL ist. – Strawberry

+0

Danke! Ich werde es versuchen. –

+0

Einfach eine Zeitstempelspalte hinzufügen? (Dann ist die Reihenfolge unwichtig.) – jarlh

Antwort

-1

immer Schritten von 10 verwenden, so dass Sie Raum für 9 zusätzliche Beiträge dazwischen ..

+1

Was ist mit dem 10. Post? – Strawberry

+0

Hey warum -1? Es ist eine Lösung für die gestellte Frage. Ich stimme zu, dass es nicht die eleganteste Art ist, aber es bringt den Job fertig – verhie

+0

Sorry, aber das ist nicht wirklich das, was ich gefragt habe ... Danke trotzdem! –

0

Verwenden Schritte 10000.

Algorithmus:

  • Wenn neue Stelle nach dem letzten - bestellen Nummer eingestellt zum letzten Nummer + 10000
  • Sonst erhalten arithmetisches Mittel Bestellnummer zwischen vor und nach Beiträge
  • Wenn keine freien Nummern zwischen den Beiträgen - führen Sie die vollständige Neunummerierung Beiträge Zweig. Nach dem Einfügen einer neuen Zeile.

Umnummerierung query:

update posts 
    set number=(select @i:[email protected]+10000) 
where (select @i:=1)=1 and (condition_for_select_posts_branch) 
order by number 
Verwandte Themen