Maxi: Mysql Datensatz mit php verschieben

Hallo,

ich habe Daten von einer MYSQL Datenbank ausgegeben. Nun sind auf der Seite Radiobutton, mit denen man einen Datensatz in der Datenbank eins nach oben verschieben soll. Leider weis ich nicht wie ich das realisieren kann. Kann mir einer weiterhelfen?

Gruß
Maxi

  1. Hi,

    ich habe Daten von einer MYSQL Datenbank ausgegeben. Nun sind auf der Seite Radiobutton, mit denen man einen Datensatz in der Datenbank eins nach oben verschieben soll. Leider weis ich nicht wie ich das realisieren kann. Kann mir einer weiterhelfen?

    weiße den Datensätzen eine ID zu. Beim Auslesen sortierst du nach dieser. Beim Verschieben änderst du die ID so ab, dass sich die Reihenfolge wie gewünscht verändert.

    Schöne Grüße
    Julian

    1. Hi,

      ich habe Daten von einer MYSQL Datenbank ausgegeben. Nun sind auf der Seite Radiobutton, mit denen man einen Datensatz in der Datenbank eins nach oben verschieben soll. Leider weis ich nicht wie ich das realisieren kann. Kann mir einer weiterhelfen?

      weiße den Datensätzen eine ID zu. Beim Auslesen sortierst du nach dieser. Beim Verschieben änderst du die ID so ab, dass sich die Reihenfolge wie gewünscht verändert.

      Schöne Grüße
      Julian

      Hi,

      danke für deine Antwort. Das habe ich mir auch schon überlegt, aber wenn ich einen Datensatz lösche, dann ist eine Lücke z.B. 5 und dann kommt 7.  Und dann wenn ich 7 verschieben will, dann ändert sich nichts wenn aus 7 6 wird.

    2. Hi,

      weiße den Datensätzen eine ID zu. Beim Auslesen sortierst du nach dieser. Beim Verschieben änderst du die ID so ab, dass sich die Reihenfolge wie gewünscht verändert.

      eieiei, Sortierungen auf Basis von IDs, das ist aber ganz böse. Ich meine hier nicht die alte Autowert-Diskussion, sondern generell die Feststellung: Niemals Sortierungen an den Primary-Key hängen. Sollte zu einem späteren Zeitpunkt mal irgendwas (->Fremdschlüssel) an dem Key hängen hast du bei einer Änderung je nach Konzept einen Riesenaufwand und eine große Fehlerquelle...

      Bzgl. des eigentlichen Problems: Ich würde die Variante mit der Satznummerierung tatsächlich auf vorschlagen. Im Gegenteil, ich würde sogar zu größeren Lücken (z.B. 10 20 30) tendieren um bessere Einfügeoperationen zu haben. Nichtsdesto trotz besteht ein Umsortieren dann aus mehreren Änderungsoperationen, nämlich zum einen Vergabe der neuen Nummer für den umsortierten Satz und zum anderen Anpassung der Sätze die von der Verschiebung sonst noch betroffen sind. Wobei das auch relativ einfach geht wenn man die Struktur richtig anpackt, bedenke z.B.
      ID | SortNummer
      1    1
      2    4
      3    2
      4    3
      5    5

      Jetzt soll der Satz Nummer 5 auf 1, das sind jetzt also zwei Updates:
      UPDATE ... SET SortNummer = SortNummer + 1 WHERE SortNummer >= 1
      UPDATE ... SET SortNummer = 1 WHERE ID = 5
      Ist zugegebenermaßen die schlampige Variante, weil nicht vorher geprüft wurde, ob die 1 überhaupt belegt ist und verschoben werden muss, ist in dieser Form also nur dann nötig, wenn die SortNummer wirklich fortlaufende Nummern sind.

      Eine völlig andere, aber meiner Meinung nach für die reguläre Abfrage völlig unhandhabbare Struktur, ist so eine Art Listenverkettung, d.h. jedes Element kennt seinen Vorgänger (oder Nachfolger) in Form seiner ID. Umsortieren wäre dann "verschobenes Element als Vorgänger (Nachfolger) Eintragen" und "alten Nachfolger (Vorgänger) umbiegen".
      Aber die Struktur kriegst du in einem (nicht rekursiven) Query so schlecht ausgelesen.

      MfG
      Rouven

      --
      -------------------
      ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|