Hello,
Du musst die Anweisungen einzeln an die Datenbank senden. Schreibe dir die Informationen am besten in ein Array und schicke dann mittels einer Schleife und mysql_query() die Infos an die Datenbank.
Selbstverständlich kann man auch bei MySQL in einem einzigen Statement mehrere Datensätze mit unterschiedlichen, nicht berechneten Daten auf einmal updaten.
Das ist dann sogar immer wichtig, wenn die Änderungen in Korrelation stehen, wenn also der eine Satz in der Tabelle nicht gändert werden darf, ohne dass der andere auch geändert wird (beim Tausch von Eigenschaften z.B.). Da benötigt man dann ein atomares Statement oder mann muss die Datensätze vorher sperren oder eben eine Transaktionsverwaltung zur Verfügung haben.
Da man bei Datenbanken besser auf Satz- und Tabellensperren verzichten sollte, ist so ein "Multiupdate" der bessere Weg, wenn die Anzahl der zu ändernden Felder und Datensätze nicht zu groß wird.
Sonst wird es unhandlich.
Da aber das Statement hier sowieso von PHP generiert wird, kann man auch ein ganzes Grid berechnen lassen... Man muss es ja nicht manuell eintippen :-)
Nachteil des Verfahrens ist, es darf nichts schief gehen beim Statement. Das könnte nämlich passieren, wenn jemand anders einen Satz aus dem Dataset gesperrt hält.
Beispiel:
CREATE TABLE adresse (
id\_adresse bigint(20) unsigned NOT NULL auto_increment,
upddat datetime default NULL,
vorname varchar(30) default NULL,
nachname varchar(30) default NULL,
strasse varchar(30) default NULL,
plz varchar(8) default NULL,
ort varchar(30) default NULL,
geschlecht char(1) default NULL,
PRIMARY KEY (id\_adresse),
UNIQUE KEY id\_adresse (id\_adresse),
KEY id\_adresse\_2 (id\_adresse)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
update adresse
set geschlecht =
if(id_adresse=1,'m',
if(id_adresse=2,'w',
if(id_adresse=3,'m',
if(id_adresse=4,'w',
if(id_adresse=5,'m',geschlecht))))),
upddat=now()
where id_adresse in (1,2,3,4,5);
update adresse
set geschlecht =
if(id_adresse=1,'m',
if(id_adresse=2,'w',
if(id_adresse=3,'m',
if(id_adresse=6,'m',
if(id_adresse=7,'m',geschlecht))))),
upddat=now()
where id_adresse in (1,2,3,6,7);
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
