kostenloser Webspace werbefrei: lima-city


MySQL UPDATE mehrere Zeilen ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    scusu

    scusu hat kostenlosen Webspace.

    Hallo

    bei MySQL INSERT kann man ja ganz einfach mehrere Zeilen eintragen
    $sql = "INSERT INTO table_x
      (a,b,c)
    VALUES
      (1,2,3),
      (4,5,6),
      (7,8,9)
    ";


    geht das auch bei UPDATE .... ???

    $sql1 = "UPDATE table_x SET wert = '".$neuer_wert"' WHERE id= '1'"; 
    $sql2 = "UPDATE table_x SET wert = '".$neuer_wert"' WHERE id= '2'"; 
    $sql3 = "UPDATE table_x SET wert = '".$neuer_wert"' WHERE id= '3'";


    kann man UPDATE für mehrere Zeilen auch in eine Abfrage zusammenfassen,
    ähnlich wie bei INSERT ... ?

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h**s

    Hi scusu,

    also im prozeduralen stil ginge das meiner meinung nach nur so:
    $sql1 = "UPDATE table_x SET wert = '".$neuer_wert"' WHERE id= '1'" OR id='2' OR id='3';


    aber ich würde dir raten dich diesbezüglich über mysqli schlau zu machen.
  4. h***e

    Schreibe eine schleifen die alle werte ändert
    dazu musst du aber die werte in ein array schreiben.
    z.B. $wert[0] = 'hallo';
    ...

    Beitrag zuletzt geändert: 11.4.2013 16:02:03 von hpage

  5. kann man UPDATE für mehrere Zeilen auch in eine Abfrage zusammenfassen,
    ähnlich wie bei INSERT ... ?


    Das geht, aber nur mit INSERT ... ON DUPLICATE KEY UPDATE:

    $sql = "INSERT INTO table_x (id,a,b) VALUES (1,2,3), (4,5,6),  (7,8,9) 
    ON DUPLICATE KEY UPDATE a=VALUES(a),b=VALUES(b);";


    http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    Beitrag zuletzt geändert: 11.4.2013 19:36:27 von wrertzu
  6. Autor dieses Themas

    scusu

    scusu hat kostenlosen Webspace.

    Hallo

    @hpage ... ja, mit einer Schleife mache ich es ja schon jetzt
    aber dann muss ich je bei jedem Durchlauf ein MySQL-Query neu senden,
    aber ich suche ja was, das mit einer Anfrage geht .

    @wrertzu ... Danke, das klingt gut ... DUPLICATE KEY UPDATE ...
    werde ich mal ausprobieren ... aber in der MySQL Doku steht

    es so
    UPDATE c=VALUES(a)+VALUES(b)
    anstatt
    UPDATE c=VALUES(a),VALUES(b)


    ??? also mit + (Plus) anstatt mit , (Komma)

    INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
      ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);


    naja. ... probieren geht über studieren :)
  7. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Also bei meinen Datenbanken, wenn ich mehrere Zeilen mit den selben Werte aktualisieren muss, verwende ich "OR" in der WHERE-Klausel.

    Sprich:
    UPDATE Table SET KEY = VALUE WHERE ID = 1 OR ID = 2 OR ID = 3;


    Ich nehme diesen Code, weil ich versuche komplexe SQL-Konstrukte zu vermeiden und den Code einfach zu halten. Macht ihn portabler auf andere DBMS.

    Beitrag zuletzt geändert: 12.4.2013 11:56:09 von schrotti12
  8. Autor dieses Themas

    scusu

    scusu hat kostenlosen Webspace.

    hmmm, da war mein Beispiel oben wohl nicht passend,

    ich will zwar UPDATE in jeweils der gleichen Spalte
    aber je Zeile mit unterschiedlichem Wert

    ich habe ein Array mit KEY = id der Zeile und VALUE = der neue Wert
    und mache es bisher so:

    $neue_werte = array ( '1' => '12345', '2' => 'abcde', '3' => 'xyz123'); 
    
    foreach($neue_werte as $id => $neuer_wert ) { 
      $sql = "UPDATE table_x SET wert = '".$neuer_wert"' WHERE id= '".$id."'"; 
      $res = mysql_query($sql); 
    }


    wie baue ich das jetzt um zu ON DUPLICATE KEY UPDATE?
  9. h**s

    hi,

    also ich finde für dein anliegen ist mysqli mit prepared-statements geradezu prädestiniert, und eh moderner.

    ein schönes beispiel wie du das einfach bauen kannst findest du hier (mit insert statt update):
    http://www.phpbuddy.eu/mysqli-erweiterung-php-5.html?showall=1
  10. Hier mal ein Vorschlag:
    $mysqli = new mysqli($hostname, $username, $password, $database);
    if (mysqli_connect_errno()) {
        printf("Datenbankverbindung nicht möglich: %s\n", mysqli_connect_error());
    
    exit();
    }
    $werte = "(1,'12345'),(2,'abcde'),(3,'xyz123')";
    $sql = 'INSERT INTO deine_tabelle(id,s1) VALUES '.$werte.'ON DUPLICATE KEY UPDATE id=VALUES(id),s1=VALUES(s1)';
    $stmt = $mysqli->prepare($sql);
    $stmt->execute();
    $stmt->close();

    Für diese Lösung braucht es kein Array. Ein String reicht vollkommen aus.
    Es braucht auch keine Schleife, was die Performance deutlich erhöht.
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!