jan: mehrere Spalten ändern mit UPDATE

hallo,

hab folgendes problem.
ich möchte mit einer anweisung mehrere spalteninhalte mit einmal ändern.
also $test1_alt soll durch $test1_neu ersetzt werden usw.
leider klappt das immer nur mit einer spalte aber nicht mit mehreren.
muss man die denn nicht mit komma trennen?
aber leider klappts so nicht :-(
kommt auch keine fehlermeldung!

$update = "UPDATE haupt SET B1_CODE='$test1_neu',B2_INST='$test2_neu' WHERE B1_CODE='$test1_alt',B2_INST='$test2_alt' AND (A1_ALL LIKE '$gemeinde_nr%')";
$geaendert = mysql_query($update);

danke für eure tipps

gruß jan

  1. Huhu Jan

    [pref:t=78714&m=455333]
    Dein erster Thread ist noch in der Hauptdatei, auf Nachfragen und Hinweise dort hast Du aber nicht reagiert.
    Warum stellst Du die identische Frage gestern und jetzt heute erneut?

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Huhu Jan

      Warum stellst Du die identische Frage gestern und jetzt heute erneut?

      Ok, das identisch nehme ich nach vollständigem öffnen der Augen zurück ;-)

      Trotzdem ist es nicht sinnvoll dafür einen neuen Thread zu eröffnen.
      So kann niemand das Problem gut nachvollziehen.

      Viele Grüße

      lulu

      --
      bythewaythewebsuxgoofflineandenjoytheday
    2. hallo,

      na dank deinem tipp hat das ja mit dem

      AND (A1_ALL LIKE '$gemeinde_nr%')";

      jetzt geklappt!

      mein jetztiges problem ist aber ein anderes, wie eben erst beschrieben,
      dass ich gern mehrere spalteninhalte aktualisieren möchte.
      und da komm ich noch nicht ganz zu recht.

      jan

  2. Willst Du erreichen, dass test1_alt durch test1_neu und test2_alt durch test2_neu ersetzt wird, sprich, die beiden Spalten unabhängig voneinander geändert werden, dann musst du auch 2 UPDATES drauf laufen lassen. Wenn du willst, dass test1_neu und test2_neu in den Datensätzen in denen die Felder mit test1_alt UND test2_alt belegt sind, dann reicht eine Query. Ist die Frage was du genau willst, kann ich nicht rauslesen, sorry.

    PS: Ich denke es geht hier mehr um ein SQL Problem (falsche Kategorie gewählt)

    Gruss
    Stefan

    1. es ist so, dass ich beide - also test1_alt UND test2_alt ersetzen will.
      nun ist halt mein problem, wie man das in der syntax richtig vereinbart.

      hast du n tipp?

      danke schonmal

      jan

      1. Hi,

        dass Du beide ersetzen willst ist mir klar *g*
        Die Frage war, ob die Ersetzung unabhängig oder abhängig voneinander laufen soll:

        Wann soll zum Beispiel das Feld test1 ersetzt werden?

        1. Wenn test1=test1_alt und test2 beliebig oder
        2. Wenn test1=test1_alt und test2=test2_alt

        Im letzteren Fall würde dann ja auch test2 ersetzt (abhängig voneinander). Der Fall wäre einfacher, der erste Fall MUSS getrennt laufen.

        Gruss
        Stefan

        1. Moin

          dass Du beide ersetzen willst ist mir klar *g*
          Die Frage war, ob die Ersetzung unabhängig oder abhängig voneinander laufen soll:

          Wann soll zum Beispiel das Feld test1 ersetzt werden?

          1. Wenn test1=test1_alt und test2 beliebig oder
          2. Wenn test1=test1_alt und test2=test2_alt

          Im letzteren Fall würde dann ja auch test2 ersetzt (abhängig voneinander). Der Fall wäre einfacher, der erste Fall MUSS getrennt:

          Hm hab ich Dich gerade falsch verstanden?
          Du kannst doch or nehmen also so:
          Wenn test1=test1_alt oder test2=test2_alt

          Viele Grüße TomIRL

          1. Moin

            dass Du beide ersetzen willst ist mir klar *g*
            Die Frage war, ob die Ersetzung unabhängig oder abhängig voneinander laufen soll:

            Wann soll zum Beispiel das Feld test1 ersetzt werden?

            1. Wenn test1=test1_alt und test2 beliebig oder
            2. Wenn test1=test1_alt und test2=test2_alt

            Im letzteren Fall würde dann ja auch test2 ersetzt (abhängig voneinander). Der Fall wäre einfacher, der erste Fall MUSS getrennt:

            Hm hab ich Dich gerade falsch verstanden?
            Du kannst doch or nehmen also so:
            Wenn test1=test1_alt oder test2=test2_alt

            Viele Grüße TomIRL

            Dann ersetzt Du aber IMMER BEIDE WERTE, wenn feld1=feld1_alt ODER feld2=feld2_alt ist. Ich dachte du willst NUR feld1 ändern, wenn feld1=feld1_alt ist, oder wie nun? ;)

            Verstehst Du die Logik der Logischen Operatoren?

            Gruss
            Stefan

        2. es soll schon der fall 2 sein. es sollte beides abhängig voneinander geschehen...

          jan

          1. es soll schon der fall 2 sein. es sollte beides abhängig voneinander geschehen...

            Hi Jan,
            Könntest Du mal Dein Problem Präzisieren?
            Was hast Du getan?
            Hast Du die von mir empfohlenen Fehlerroutinen eingebaut und prüfst Du ab welche Fehler kommen?
            Hast Du die Dokumentation zu den WHERE Bedingungen gelesen und verstanden?
            Was hast Du nicht verstanden?
            Welche Bedingungen sollen für Dein Statement erfüllt sein? Formuliere diese Bedingungen mal ausführlich in Deiner Muttersprache, dann ist das umsetzen eigentlich nicht mehr so problematisch.

            Viele Grüße TomIRL

            1. also,

              $update = "UPDATE haupt SET B1_CODE = '$anbieter_code_neu' WHERE B1_CODE = '$anbieter_code_alt' AND (A1_ALL LIKE '5m')";

              mit der obigen syntax erreich ich, dass für alle angebote, die im schlüssel mit 5m beginnen die alten inhalte in der spalte B1_CODE durch neue ersetzt werden.
              so wie es hier steht, klappt es auch.
              nun will ich aber, dass nicht nur der anbieter-code evtl erneuert werden kann, sondern eben auch der name, der ort usw.

              ich hab also n formular, wo die aktuellen (alten) werte aus der DB in die input-felder geschrieben werden.
              so, wenn daten aktualisert werden sollen, dann werden die eben in den input-feldern erneuert und dann klickt man auf einen button zum ändern der daten bzw. zum reinschreiben in die DB.
              es kann aber sein, dass man z.Bsp. nur die telefonnumer ändert und alles andere bleibt gleich, so dass wen  ich auf den button klicke, eben trotzdem alle daten in DB geschrieben werden, aber eben nur die tele.-nr. ist neu und diese wird aktualisiert.

              hab also im script zum reinschreiben der daten in die DB alle variableninhalte - einmal neu und einmal alt.
              Bsp.:
              $anbieter_code_alt = 'ABCDE'
              $anbieter_code_neu = 'XYZ'

              hoffe, das war verst. genug gruß jan

              1. also,

                $update = "UPDATE haupt SET B1_CODE = '$anbieter_code_neu' WHERE B1_CODE = '$anbieter_code_alt' AND (A1_ALL LIKE '5m')";

                mit der obigen syntax erreich ich, dass für alle angebote, die im schlüssel mit 5m beginnen die alten inhalte in der spalte B1_CODE durch neue ersetzt werden.
                so wie es hier steht, klappt es auch.
                nun will ich aber, dass nicht nur der anbieter-code evtl erneuert werden kann, sondern eben auch der name, der ort usw.

                ich hab also n formular, wo die aktuellen (alten) werte aus der DB in die input-felder geschrieben werden.
                so, wenn daten aktualisert werden sollen, dann werden die eben in den input-feldern erneuert und dann klickt man auf einen button zum ändern der daten bzw. zum reinschreiben in die DB.
                es kann aber sein, dass man z.Bsp. nur die telefonnumer ändert und alles andere bleibt gleich, so dass wen  ich auf den button klicke, eben trotzdem alle daten in DB geschrieben werden, aber eben nur die tele.-nr. ist neu und diese wird aktualisiert.

                Dann erneuere doch im Update Statement alle Werte.
                Sprich
                SET
                FELD1=SPALTE1
                Feld2= Spalte2
                Das Update Statement bezieht sich ohnehin auf den kompletten Datensatz.
                Du kannst nätürlich auch in einem komplizierten Abfragessytem die Daten vergleichen und die Querry dynamisch zusammensetzen.
                Aber das halte ich für die allermeisten Anwendungen für absolut überflüssig.

                TomIRL

                1. ja nun ist mein problem aber, wie ich in der syntax
                  die verschiedenen änderungen korrekt verknüpfe, ob mit komma oder wie auch immer?

                  1. Hi Jan,
                    UPDATE personen SET
                    spalten_name1=Wert,
                    spalten_name3=Wert,
                    spalten_name2=Wert2
                    WHERE....

                    Nachzulesen unter
                    http://www.mysql.de/doc/de/UPDATE.html
                    Tutorials liegen Dir nicht so?

                    Du soltest diese Dinger aber unbedingt lesen bevor Du hier schreibst, sonst kann es sein das jemand Dich mal ganz schnell "bügelt".
                    :-)
                    TomIRl

                    1. also ganz so ist es ja nun nicht.
                      auf der tutorial-seite war ich auch schon und hab nachgeschaut.
                      aber leider klappts so wie da nicht.
                      hab jetzt meine syntax nochmal so gebaut wie im tutorial.
                      aber klappts so nicht. :-(

                      $update = "UPDATE haupt SET B1_CODE = '$anbieter_code_neu',B2_INST = '$b2_inst_neu' WHERE B1_CODE = '$anbieter_code_alt',B2_INST = '$b2_inst_alt' AND (A1_ALL LIKE '$gemeinde_nr%')";

                      hab also die spalte mit komma getrennt.

                      hoffentlich bekommen wir beide es heut noch hin :-)
                      vielelicht haste ja ne idee, woran es hier hakt.

                      danke schonmal!

                      jan

                      1. $update = "UPDATE haupt SET
                        B1_CODE = '$anbieter_code_neu',
                        B2_INST = '$b2_inst_neu'
                        WHERE
                        B1_CODE = '$anbieter_code_alt',B2_INST = '$b2_inst_alt' AND
                        (A1_ALL LIKE '$gemeinde_nr%')";

                        So nun lasse Dir doch mal die Fehler ausgeben, in welcher Zeile kommt der Fehler?
                        mysql_querry
                        und dann dann siehst Du wo dr Fehler liegt...
                        echo mysql_errno() . ": " . mysql_error() . "\n";

                        ToMIRL

                        1. 1064:You have an error in your SQL syntax near ' B2_INST = 'TEST' AND A1_ALL LIKE '5nz%'' at line 5

                          das ist die fehlermeldung.
                          schein wohl irgendwie am AND zu liegen oder so?