PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : probleme mit bedingungsformulierung...



jean_luc_picard
10-04-2003, 17:51
hallo leute,

ich möchte in einem skript daten in eine datenbank eintragen, habe aber die WHERE-clausel noch nicht ausreichend definiert bekommen... diese soll folgendes bewirken:

es soll der nur letzte datensatz aktualisiert werden, die datensätze sind durchnummeriert (ID mit auto_increment) -> datensatz mit der höchsten ID.
der datensatz soll nur dann aktualisiert werden, wenn in spalte xy der wert 0 steht.

wie formuliert man das gescheit?

danke, gruss picard

Christoph
11-04-2003, 08:21
Lösung: subselect in der WHERE-Klausel.


update tbl set x='y' where nr = (select max(nr) from tbl);

Das klappt übrigens sogar im Transaction Isolation Level
"Read Committed", weil auch dann ein einzelnes SQL-Stetement in einer
eigenen Transaktion läuft und damit einen konsistenten Zustand sieht.
(Im allgemeinen ist der Isolationsgrad "Serializable" natürlich sicherer).

Gaert
11-04-2003, 09:45
Hallo!

Fehlt nur noch die Bedingung mit dem xy=0

UPDATE tbl SET x='y' WHERE rr = (SELECT max(nr) FROM tbl) AND xy=0;

... wenn ich "auto_increment" lese muss ich an mysql denken. Mit mysql wird das nicht funktionieren, weil es keine Subselects unterstützt.

jean_luc_picard
11-04-2003, 13:24
da liegst du richtig... ich verwende mysql...

wenn das da nicht unterstützt wird, wie kann man das dann machen?

Jinto
12-04-2003, 15:42
indem du dein Script so schreibst, dass es zwei separate Aufrufe dafür verwendet:
$a=select max(nr) from bla;
UPDATE tbl SET x='y' WHERE rr = $a;

HTH