MySQL UPDATE mehrere Zeilen ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
array
ausprobieren
beispiel
code
durchlauf
http
klausel
komma
mache
machen
performance
schleife
set
statement
studieren
update
url
werte aktualisieren
zeile
-
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 ... ?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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 -
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
anstattUPDATE c=VALUES(a)+VALUES(b)
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 :)
-
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 -
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?
-
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 -
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage