Update "gleichzeitig" machen!?

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

  • Update "gleichzeitig" machen!?

    Hallo, ich habe ein kleines Updateproblem.
    Folgendes Beispiel:

    $cat = 3
    $catgrosser = 5

    Die Variablen sind so gegeben. Nun ist ja das Problem, dass erst "... SET cat='$catgrosser' WHERE cat='$cat'" ausgeführt und dann "... SET cat='$cat' WHERE cat='$catgrosser'" - dass ganze wird überschrieben und beide erhalten die gleiche $cat! Wie kann ich das Lösen? Es geht nicht über einen Primärschlüssel, weil $cat auf mehrere Einträge zutrifft.

    PHP-Code:
    $sql="UPDATE menu_test SET cat='$catgrosser' WHERE cat='$cat'";
        
    $result mysql_query($sql,$db);

    //++

    $sql="UPDATE menu_test SET cat='$cat' WHERE cat='$catgrosser'";
        
    $result mysql_query($sql,$db); 
    THX

  • #2
    eine pfusch-variante davon ausgegangen, dass es keine cats über 1000 gibt :

    PHP-Code:
    $catgrosser_temp $catgrosser+1000;

    $sql="UPDATE menu_test SET cat='$catgrosser_temp' WHERE cat='$cat'";
        
    $result mysql_query($sql,$db);

    //++

    $sql="UPDATE menu_test SET cat='$cat' WHERE cat='$catgrosser'";
        
    $result mysql_query($sql,$db);

    $sql="UPDATE menu_test SET cat='$catgrosser' WHERE cat='$catgrosser_temp'";
        
    $result mysql_query($sql,$db); 
    ... ich duck mich schonmal
    (-:
    Bookmarks:·Bilder·Jobs·Recht·
    kostenloser Webkataloge-Assistent

    Kommentar


    • #3
      jeder eintrag hat ja ne eindeutige id (primärschlüssel), also liest du zuerst alle IDs mit cat 3 aus und setzt die kategorie da auf 5 und dann setzt du die kategorie da auf 3 wo die kategorie 5 is, die ID aber nicht zu den IDs gehört, die du ausgelesen hast


      oder:
      du willst einfach kategorien tauschen oder?
      da du das über zahlen machst (3 und 5) hast du ja sehr wahrscheinlich ne tabelle, in der all diese kategorien stehen die du einfacher ändern könntest oder?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Original geschrieben von kill_bill
        eine pfusch-variante ... :
        kann man sagen, aber es ist auch eine Lösung...

        @ happy:
        ja, eigentlich will ich einfach Kategorien tauschen...
        Ich hab das mal so gelöst, nur, wie bring ich mehrere ID's in die Update-Anfrage? Mit meinem Code wird ja leider nur mit der ersten das richtige gemacht!

        PHP-Code:
        $sql="UPDATE menu_test SET cat='$catgrosser' WHERE cat='$catid' AND id='$id'";
            
        $result mysql_query($sql,$db);

        //++

        $sql="UPDATE menu_test SET cat='$catid' WHERE cat='$catgrosser' AND id != '$id'";
            
        $result mysql_query($sql,$db); 
        ... Danke

        Kommentar


        • #5
          Original geschrieben von kill_bill
          eine pfusch-variante ...
          ... ich duck mich schonmal
          Warum ... das ist keine Pfusch Variante ... sondern ein ganz normaler Swap Vorgang ... im Zweifel würde ich versuchen mir in der Tabelle die id 0 (Null) freizuhalten ... das finde ich sauberer ... du kannst aber auch mit "SELECT MAX(id)+1 ... " die nächste freie id ermitteln ...
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            ich würd die "pfusch-variante" vorziehen, zumal ich die gar nicht so
            pfuschig finde .

            happys lösung braucht 1 select und 2 updates, ist dazwischen aber
            komplizierter (ids hole & merken|die einen nehmen|die anderen
            ausschliessen).

            kill_bills version braucht 3 updates und nix dazwischen.

            letztendlich wirst du das ja nicht 1000mal pro stunde durchführen.
            insofern ist imho der weg wurscht, wenn das ergebnis stimmt.
            Kissolino.com

            Kommentar


            • #7
              OK, ich mach es also mit der "Pfusch"-Variante...
              Nun aber ein Problem und ich find nicht raus was! Wenn ich nun folgenden Code ausführe, wird zwar die eine cat kleiner gemacht, die neue erhält aber immer den Wert 127! (wenn cat=3 und catgrosser=5)
              Warum das?
              PHP-Code:
              $sql="SELECT cat FROM menu_test WHERE cat>'$catid' ORDER BY cat ASC LIMIT 1";
                  
              $result1 mysql_query($sql,$db) or die(mysql_error());
              while (
              $LinkRec mysql_fetch_array($result1))
                      {
                      
              $catgrosser $LinkRec['cat'];
                      }                    
              //++

              $catgrosser_temp 1000;

              $sql="UPDATE menu_test SET cat='$catgrosser_temp' WHERE cat='$catid'";
                  
              $result mysql_query($sql,$db);

              //++
              $sql="UPDATE menu_test SET cat='$catid' WHERE cat='$catgrosser'";
                  
              $result mysql_query($sql,$db);

              $sql="UPDATE menu_test SET cat='$catgrosser' WHERE cat='$catgrosser_temp'";
                  
              $result mysql_query($sql,$db); 

              Kommentar


              • #8
                lass mich raten, die tabellenspalte ist ein "tinyint", die geht nur bis 128
                und da bei 0 begonnen wird ist bei 127 schluss ... mach nen "int" draus.
                Kissolino.com

                Kommentar


                • #9
                  Tja, genau das war es! Vielen Dank

                  Figugegu

                  Kommentar

                  Lädt...
                  X