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:
123456$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:
1234567891011$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