Matze: Mehrere Einträge in DB gleichzeitig updaten?

Hi,

kann ich mit dem UPDATE-Befehl auch mehrere Einträge in meiner mySQL_DB gleichzeitig ändern?

Ich hab es so versucht, aber es funktioniert nicht:

$aendern = "UPDATE gbook SET (name, homepage, title, message, email) = ('$von', '$website', '$titel', '$text', '$email' WHERE id = '$entryid')";
$update = mysql_query($aendern);

Was ist daran verkehrt?

Besten Gruss vom
Matze

  1. Hi,

    kann ich mit dem UPDATE-Befehl auch mehrere Einträge in meiner mySQL_DB gleichzeitig ändern?

    Ja.

    $aendern = "UPDATE gbook SET (name, homepage, title, message, email) = ('$von', '$website', '$titel', '$text', '$email' WHERE id = '$entryid')";

    ^                     ^

    Klammersetzung...

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
  2. Hi,

    da ist wohl was durcheinander gekommen.

    SET steht immer ohne Klammern und direkt mit den Werten. Nur bei Insert werden Klammern gesetzt und dann auch das Schlüsselwort VALUES bitte nicht vergessen.

    kann ich mit dem UPDATE-Befehl auch mehrere Einträge in meiner mySQL_DB gleichzeitig ändern?

    Jein. Du kannst den Befehl für die Änderung mehrerer Sätze in der DB in einem Statement absetzen. Die Änderungen werden dann vom DBMS _nacheinander_ aber automatisch ausgeführt. Diese Vorstellung sollte man nicht verlieren, denn wenn die Tabelle nicht gelockt weird, können andere Prozesse zwischendurch den Status Quo verändern und die Abfrage tut am Anfang was anderes, als am Ende.

    Sie hat immer eine Laufzeit.

    $aendern = "UPDATE gbook SET name='$von', homepage='$website', title='$titel', message='$text', email='$email' WHERE id = '$entryid'";

    $update = mysql_query($aendern, $con);

    So müsste es gehen.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    1. Moin!

      Jein. Du kannst den Befehl für die Änderung mehrerer Sätze in der DB in einem Statement absetzen. Die Änderungen werden dann vom DBMS _nacheinander_ aber automatisch ausgeführt. Diese Vorstellung sollte man nicht verlieren, denn wenn die Tabelle nicht gelockt weird, können andere Prozesse zwischendurch den Status Quo verändern und die Abfrage tut am Anfang was anderes, als am Ende.

      Sie hat immer eine Laufzeit.

      Kannst du dafür Belege bringen. Nach meiner bisherigen Ansicht bin ich davon ausgegangen, dass ein einzelner SQL-Befehl atomar ist - wenn der also ausgeführt wird, dann komplett und ohne dass irgendein anderer Prozess ihm dazwischenfunken kann.

      Und es ist mit UPDATE kaum möglich, unterschiedliche Updates auf unterschiedliche Datensätze loszulassen. Ein einzelnes Update-Statement kann zwar sehr wohl mehrere Datensätze beeinflussen, ich kann mir aber gerade keine Möglichkeit vorstellen, in einem Datensatz den Namen und im anderen die Homepage zu ändern - in _einem_ Update.

      $aendern = "UPDATE gbook SET name='$von', homepage='$website', title='$titel', message='$text', email='$email' WHERE id = '$entryid'";

      - Sven Rautenberg

      --
      "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
      1. Hallo Sven,

        Kannst du dafür Belege bringen. Nach meiner bisherigen Ansicht bin ich davon ausgegangen, dass ein einzelner SQL-Befehl atomar ist - wenn der also ausgeführt wird, dann komplett und ohne dass irgendein anderer Prozess ihm dazwischenfunken kann.

        Ich werde sie bei nächster Gelgenheit aufheben. Ist mir schon ein paarmal passiert. Mann kann bei manchen Datenbanken sogar einen zirkulären Verlauf produzieren, wenn man das Feld ändert, dessen Index für die Abarbeitungsreihenfolge wesentlich ist.

        Man kann Feldern der DB berechnete Werte zuweisen, die sich z.B. aus Aggregatfunktionen mit anderen Feldern der DB ergeben.

        Und es ist mit UPDATE kaum möglich, unterschiedliche Updates auf unterschiedliche Datensätze loszulassen. Ein einzelnes Update-Statement kann zwar sehr wohl mehrere Datensätze beeinflussen, ich kann mir aber gerade keine Möglichkeit vorstellen, in einem Datensatz den Namen und im anderen die Homepage zu ändern - in _einem_ Update.

        Auch das ist möglich, da man die Feldauswahl mit Hilfe eines inline-IFs treffen darf und kann. Das Feld wird also nur dann verändert, wenn es eine bestimmte Bedingung erfüllt ist. Darum sit ja beim SET die Syntax als Direktzuweisung aufgebaut und nicht in Form von zwei Parameterlisten.

        Ich habe das schon öfter bei MySQL zu meiner vollsten Zufriedenheit angewandt.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
        1. Hi,

          da muss ich doch glatt was korrigieren:

          in MySQL funktionieren die inline-IFs nur beim Select. Da kann man die Erzeugung von Spalten und deren Inhalt beliebig von Kreuz- und Querbedingungen abhängig machen.

          Beim Update geht das by MySQL leider nicht. Hat mir doch keine Ruhe gelassen...

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.