Frage

habe ich eine Tabelle auf meiner Seite, wo der Benutzer die Zeilen die Fähigkeit zur Wieder Ordnung hat. Dieser Teil ist einfach mit jQuery UI zu tun, und die neuen Ordnung zurück bekommen ist einfach, die $('#sortable').sortable("serialize") Methode. Meine Frage ist nun, was ist der effizienteste Weg, um alle diese Datensätze in der Datenbank zu speichern, da die Reihenfolge eines Elements zu ändern ändert alle Datensätze in der Tabelle? Ich weiß, dass ich für jede Zeile eine neue UPDATE Anweisung erstellen könnte auf ihrer ID basiert, aber ich fühle mich wie es eine bessere Art und Weise sein. Gibt es?

Ich bin mit MySQL und ASP.NET.

War es hilfreich?

Lösung

Mit dem START TRANSACTION Befehl. Dies ist viel schneller.

Andere Tipps

In Anbetracht, dass es möglicherweise eine beliebig große Anzahl von Zeilen, würde ich speichern Sie die Bestellung als Textstring Eintrag in der Tabelle Benutzereinstellungen (vorausgesetzt, Sie haben eine solche Tabelle). Grundsätzlich wäre der Standard ein Nulleintrag sein (bis auf Plattenspeicher speichern), was bedeuten würde, dass die Reihenfolge von der Bestellung in der Datenbank unverändert ist, und wenn der Benutzer es ändert könnten Sie einfach die Reihenfolge der Zeilen serialisiert (dh wenn sie Reihe hatte 15 zuerst, dann 19, dann 3, könnten Sie haben 15-19-3) und dann einfach ausgelesen. Es ist ein einzelnes Update und es skaliert auf unbestimmte Zeit (na ja, bis die Länge der Textzeichenfolge, aber das ist ziemlich doggone groß für die mediumtext und longtext Typen).


Ich verlasse die oben für alle Fälle ist es für andere Menschen, aber für den speziellen Fall unten beschrieben ist, glaube ich, in Betracht ziehen würde die Prefs in einer Textdatei speichern. Da die Bestellung an den Benutzer ohnehin gezeigt wird, gibt es kein Sicherheitsrisiko in dem Prefs in einer Klartextdatei zu sein, und man kann das Ganze sehr schnell umschreiben. Bedenkt man, wie Sie es unten beschrieben ist, würde ich eine zweispaltige CSV-Datei verwenden, aber natürlich kann man es einrichten jedoch am meisten Sinn macht.

Eine schnelle Suche auf Dateilesegeschwindigkeiten führten zu diesem Kommentar auf der file_get_contents()-Funktion, die Sie achten darauf, wie groß die Datei, wenn das Verfahren unter Berücksichtigung werden möchten empfiehlt Ihnen Zugriff auf die Daten in der Datei verwenden werden. Ich weiß nicht, über das Schreiben.

Ihre Frage ist ein wenig Klarheit zumindest für mich fehlt. Ich stelle mir vor Ihnen zeigen, ein paar Einträge, auf die ich von ID ~ Rang verweisen. Zum Beispiel:

5~1
6~2
7~3
1~4
24~5
2~6

Jetzt sagen Ändern Sie, dass „die Größenordnung von einem Punkt ändert sich alle Datensätze in der Tabelle“. Ist das wirklich in Ihrem Design notwendig? Wenn der Benutzer die Elemente Schalter mit id-s 1 und 24, dann werden Sie die folgende serialisierte Liste haben:

[5~1],[6~2],[7~3],[24~5],[1~4],[2~6]

Jetzt durch diese Liste iterieren Sie leicht feststellen können, welche Zeilen wirklich aktualisiert werden (dies die natürliche Rangordnung unpassende).

In meinem Beispiel sollten Sie zwei Aktualisierungsabfragen machen statt sechs:

update XYZ set rank=4 where id = 24;
update XYZ set rank=5 where id = 1;

Cheers!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top