Werte Tausch in DB, Denkfehler?

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

  • Werte Tausch in DB, Denkfehler?

    Hallo Jungs,

    das folgende Skript soll eigentlich 2 Werte in der Datenbank Tauschen.

    Angenommen die beiden Werte sind 1 und 2. 2 soll zu 1 werden und umgedreht. Am Ende sind aber leider beide 1. Was mich ein wenig wundert. Habe ich in dem Skript einen denkfehler?

    Die Werte werde richtig übergeben, und aus dem DB query kommt auch der richtige Wert raus. Also $id und $sortchange sind ok.

    PHP-Code:
    <?PHP
    $id 
    $_POST["sortcode"];
    if(
    $csort_up) {
    $sql_csort "SELECT menusort FROM content WHERE menusort < '$id' AND status = 'category' ORDER BY menusort DESC LIMIT 1;"
    $result_csort mysql_query($sql_csort) OR die(mysql_error());
    $row_csort mysql_fetch_assoc($result_csort);
    $sortchange $row_csort["menusort"];
    echo 
    $id;
    echo 
    $sortchange;
    $sql_sort_entry_up2 "UPDATE content SET menusort='$id' WHERE menusort='$sortchange';";
    $sql_sort_entry_up1 "UPDATE content SET menusort='$sortchange' WHERE menusort='$id';";
    mysql_query($sql_sort_entry_up2);
    mysql_query($sql_sort_entry_up1);

    }
    Danke im vorraus...
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

  • #2
    Also angenommen $id = 1, $sortchange = 2.
    Dann ändert dein erster SQL-Query unten folgendes:
    Die Einträge mit menusort=2 werden geändert, menusort = 1 wird gesetzt.
    Alles gut und schön.
    Dann kommt aber dein zweiter Query:
    Die Einträge mit menusort=1 werden geändert, menusort=2.

    Da änderst du ja quasi die Einträge, die du mit dem ersten Query bearbeitet hast, zurück, oder?

    also auf die schnelle würde mir nur einfallen vorher den primary key der Einträge mit menusort = 2 und menusort = 1 auszulesen, und dann eben die UPDATE-Queries mit WHERE id IN (1,2,3....)

    Kommentar


    • #3
      *ROFL*

      arbeite mit eindeutigen IDs und schreibe nur dazugehörige Inhalt um, dann hast du das Problem nicht.

      z.B. 2 DS mit (id, bla)
      - 1. DS: 56, 1
      - 2. DS: 90, 2
      jetzt willst du 1 und 2 vertauschen, also
      - set bla=2 where id=56
      - set bla=1 where id=90

      denn wenn du so machst:
      set bla=2 where bla=1
      dann hast du 2 mal bla=2
      im nächsten schritt machst du
      set bla=1 where bla=2
      -> dein bisheriges Ergebnis.

      Was meinst du warum man einen Primarykey in der Tabelle erstellt?

      Kommentar


      • #4
        Ihr habt recht. habe schlichtweg einen Zwischenschritt vergessen. Danke für den Wink mit dem Zaunpfahl :]
        The Human Mirror - Mein Blog!
        www.sonicsense.de - The future of music!

        Kommentar


        • #5
          Verbesserungen?

          Hi
          ich nochmal...

          hier der Finale Code...

          vielleicht brauch es ja wer. Vielleicht gibt es auch noch was zu verbessern. Codeform etc o.Ä.

          Gruß

          PHP-Code:
          <?PHP
          if($_POST["sortcode"]) 
          {
              
          $id $_POST["sortcode"];
                  if(
          $csort_up) {
                      
          $operator "<";
                      
          $descasc "desc";
                  }
                  if(
          $csort_down) {
                      
          $operator ">";
                      
          $descasc "asc";
                  }
                  
          $sql_csort "SELECT menusort FROM content WHERE menusort $operator '$id' AND status = 'category' ORDER BY menusort $descasc LIMIT 1;"
                  
          $result_csort mysql_query($sql_csort) OR die(mysql_error());
                  
          $row_csort mysql_fetch_assoc($result_csort);
                  
          $sortchange $row_csort["menusort"];
                  
          $sql_csort_get_id_id "SELECT id FROM content WHERE menusort = '$id' AND status = 'category' ORDER BY id DESC LIMIT 1;"
                  
          $sql_csort_get_id_sortchange "SELECT id FROM content WHERE menusort = '$sortchange' AND status = 'category' ORDER BY id DESC LIMIT 1;";
                  
          $result_csort_get_id_id mysql_query($sql_csort_get_id_id);
                  
          $result_csort_get_id_sortchange mysql_query($sql_csort_get_id_sortchange);
                  
          $row_csort_get_id_id mysql_fetch_assoc($result_csort_get_id_id);
                  
          $row_csort_get_id_sortchange mysql_fetch_assoc($result_csort_get_id_sortchange);
                  
          $idsort $row_csort_get_id_id["id"];
                  
          $msort $row_csort_get_id_sortchange["id"];
                  
          $sql_sort_entry_up2 "UPDATE content SET menusort='$sortchange' WHERE id = '$idsort';";
                  
          $sql_sort_entry_up1 "UPDATE content SET menusort='$id' WHERE id = '$msort';";
                  
          mysql_query($sql_sort_entry_up2);
                  
          mysql_query($sql_sort_entry_up1);

          }
          ?>
          The Human Mirror - Mein Blog!
          www.sonicsense.de - The future of music!

          Kommentar

          Lädt...
          X