Ankündigung

Einklappen
Keine Ankündigung bisher.

Datensätze verschieben Hilfe benötigt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datensätze verschieben Hilfe benötigt

    Hallo zusammen,

    ich hab einen Knoten im Kopf ich komme einfach nicht dahinter.

    Ich habe viele viele Datensätze und jeder dieser Datensätze hat eine Position. Nun möchte ich per Eingabe der ID und der gewünschten Position die Position der Datensätze aktualisieren.

    Mein Script sieht wie folgt aus:
    PHP-Code:
        function tausche_datensatz($id$pos)
        {
            
            
    $sql 'SELECT id, position
                    FROM AKTUELLES 
                    WHERE position >= '
    .$pos;

            if (!
    $res mysql_query($sql))
            {
                return 
    $ret;
            }
            
            while (
    $zeile mysql_fetch_array($resMYSQL_ASSOC))
            {
                        
    $sql 'UPDATE AKTUELLES
                        SET position = position + 1
                        WHERE id='
    .$zeile['id'];

                        if (!
    mysql_query($sql))
                        {        
                             return 
    false;
                        }
            }
        
            
    $sql 'UPDATE AKTUELLES
                    SET position = '
    .$pos.'
                    WHERE id='
    .$id;
                        
            if (!
    mysql_query($sql))
            {        
                return 
    false;
            }
            
            return 
    true;
        } 
    So, wenn ich den Datensatz X mit Position 5 auf Position 1 haben möchte, muss ich doch alle nachfolgenden und die gleiche Positionen um 1 erhöhen. Leider wird der Datensatz der bereits auf 1 ist nicht verändert obwohl ich >= befehle. Oh mann, mit platzt gerade das Hirn, kann mir jemand weiterhelfen?

    Vielen Dank
    Stefano


  • #2
    warum so kompliziert?
    Du hast die Id, die eingereiht werden soll und die Position dafür..
    Also
    UPDATE AKTUELLES
    SET position = position + 1
    WHERE
    position >= $pos;


    dann
    UPDATE AKTUELLES
    SET position = $pos
    WHERE
    id = $id;


    Allerdings hast Du hier und in Deinem Ansatz keine fortlaufende Reihenfolge mehr

    Kommentar


    • #3
      ? jetzt versteh ich gar nix mehr.

      Wenn doch der Datensatz mit Position 5 auf Position 1 soll, dann muss doch der Datensatz der bereits auf Position 1 ist, auf 2 gesetzt werden und alle nachfolgenden auf +1 oder, damit die Reihenfolge stimmt - oder nicht?

      Hä? Bitte um Hilfe

      Kommentar


      • #4
        Also Du hast die id und den platz deiner reihenfolge auf den der Datensatz soll
        5 auf 1
        $pos = 1
        UPDATE AKTUELLES
        SET position = position + 1
        WHERE
        position >= $pos;
        Sollte alle positionen um eins erhöhen deren position >= 1 ist
        Soweit stimmts doch noch oder?


        UPDATE AKTUELLES
        SET position = $pos
        WHERE
        id = $id;
        Jetzt wird position des Datensatzes mit der ID $id auf $pos gesetzt also auf eins

        Das einzige was jetzt ein Problem sein kann ist, dass es keinen Datensatz mehr mit Position 6 gibt.

        Kommentar


        • #5
          Eigentlich müssen ja nur die Positionen zwischen der alten ($pos_von) und der neuen ($pos_nach) Position verändert werden. Vorgehen:
          • id von $pos_nach suchen
          • wenn $pos_von grösser als $pos_nach
            • UPDATE position = position + 1 WHERE $position BETWEEN $pos_nach AND ($pos_von - 1)
          • sonst
            • UPDATE position = position - 1 WHERE $position BETWEEN ($pos_von + 1) AND $pos_nach
          • Position der in 1. gefundnen id auf $pos_von setzen
          Gruss
          L

          Kommentar

          Lädt...
          X