Frederik: Konzept/Idee: Reihenfolge in Liste sinnvoll verwalten

Guten Abend zusammen!

Mein Vorhaben:
Ich möchte eine Liste mit Artikeln machen. Bei der Ausgabe/Verwendung möchte ich jedoch eine Reihenfolge definieren, also welche als erste, zweites, drittes, etc kommen. Es wird sehr viele dieser Listen geben, doch pro List wohl nur max. 100 Artikel. Ich verwende PHP 5 und MySQL 5

Problem:
Ich möchte beim bearbeiten halt recht simpel Pfeile neben die einzelnen Artikel machen damit man diese sinnvoll in der Liste weiter nach oben oder unten verschieben kann. Diese funktion wird warscheinlich recht häufig verwendet.

Bloß wie speichere ich diese Reihenfolge sinnvoll in der MySQL?

Simpelste annahme wäre natürlich eine nummerierung von 1-100, 1 für erste. 2 für zweite etc.
Wenn ich jetzt jedoch einen Artikel einen höcher mache, müsste die bei jedem danach die Reihenfolge minus eins rechnen damit nichts doppelt gibt. Und das ist ja recht Datenbank lastig alle zB. 99 Artikel danach um 1 zu vermindern damit sie halt dahinter sind und ich die Reihenfolge nicht doppelt habe.

Hatte schon überlegt mit Nachkommerstellen zu arbeiten, so das ich dann wenn ich Artikel 3 über Artikel 2 mache zB. 1,9 mache und wenn ich noch einen drüber schiebe dann zB. 1,8 oder später 1,89... aber sinnvoll ist das nicht da mir irgendwann die Nachkommerstellen ausgehen...

Wollte daher fragen, ob jemand eine Idee hat wie man Reihenfolgen anders sinnvoll verwalten kann, ohne das man alle Datensätze bearbeiten muss wenn ich zB. einen Artikel in der Reihenfolge einen hoch schiebe.

Vielen Dank und einen schönen (Feier-)Abend noch,
Frederik

  1. Hi!

    Bloß wie speichere ich diese Reihenfolge sinnvoll in der MySQL?

    Es gibt per Definition keine Reihenfolge in einer SQL-Datenbank. Füg ein Sortierkriterium hinzu, eine fortlaufende Zahl beispielsweise.

    Wenn ich jetzt jedoch einen Artikel einen höcher mache, müsste die bei jedem danach die Reihenfolge minus eins rechnen damit nichts doppelt gibt.

    Nö, du musst nur zwei Zahlen austauschen, so wie du die Position von zwei Datensätzen gegeneinander tauschst. Das sind genau zwei UPDATE-Statements, wenn du noch einen eindeutigen, sich nicht ändernden Anfasser (ID) pro Datensatz hast.

    Lo!

    1. Ja ich meinte natürlich ein Feld zu erstellen in dem ich die Reihenfolge selber verwalte mit UPDATE etc.
      Das MySQL das nicht bietet ist klar.

    2. Moin!

      Nö, du musst nur zwei Zahlen austauschen, so wie du die Position von zwei Datensätzen gegeneinander tauschst. Das sind genau zwei UPDATE-Statements, wenn du noch einen eindeutigen, sich nicht ändernden Anfasser (ID) pro Datensatz hast.

      Nein, das kann man auch in einem UPDATE hinkriegen, sofern es sich beim Sortierkriterium um Integer-Zahlen handelt.

      Wenn A und B die Platznummern sind, die getauscht werden sollen:

      UPDATE tabelle SET platz = (A + B) - platz WHERE platz IN (A, B);

      Für A und B sind die Integerwerte einzusetzen, die man getauscht haben will, und die Summenbildung darf auch außerhalb des Querys erfolgen.

      - Sven Rautenberg