Update Query in einer for-Schleife geht nicht

cameeel

Erfahrenes Mitglied
Ich versuch gerade mehrere Update Querys in einer for Schleife auszuführen, leider funktioniert das nicht so ganz.
Wenn ich mit echo mysql_error(); arbeite kommt folgende Fehlermeldung:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' 1' at line 1

Die Schleife und das Query sehen so aus:
PHP:
	for ($i = 0; $i < $ask['temp_AnzahlErgebnisse']; $i++) {
    mysql_query("UPDATE `Stats_Ergebnisse` 
 		 		 SET `erg_Erg` = '".mysql_real_escape_string($_POST['erg'.$i.''])."' 
 		 		 WHERE `erg_Stat` = '".mysql_real_escape_string($_POST['stat'])."' 
    				   ORDER BY `erg_id` ASC 
    				   LIMIT ".$i.", 1");
     	}

Wenn ich das Query mit echo einfach ausgeben lasse kommt ein (für mich) vollkommen richtiger Code herraus:
UPDATE `Stats_Ergebnisse` SET `erg_Erg` = '368' WHERE `erg_Stat` = '14' ORDER BY `erg_id` ASC LIMIT 0, 1
Die fett markierte Null ist natürlich das $i und ändert sich wie gewollt bei jedem durchlauf der Schleife.
Auch die Wert erg1, erg2 usw. die via POST übermittelt werden sind korrekt, ebenso wie der Wert aus $_POST['stat'].

Aber wo ist nun der Fehler? Warum werden die Datensätze nicht aktualisiert?

Danke schonmal,
cAm3eel.
 
Hi
Bei einem UPDATE-Befehl verwendet man kein ORDER BY.

Das ist weder erlaubt noch nötig.

Gruß
vop
 
vop hat gesagt.:
Hi
Bei einem UPDATE-Befehl verwendet man kein ORDER BY.

Das ist weder erlaubt noch nötig.

Gruß
vop

Naja selbst wenn ich es raus nimm funktionierts nicht... und laut Fehlermeldung ist der Fehler ja bei near ' 1' also dort: LIMIT ".$i.", 1

Aber für micht sieht das vollkommen richtig aus?!

Gruß,
cAm3eel.
 
ORDER BY ist schon erlaubt (auch wenn mir das wenig sinnvoll erscheint), ich vermute Dein Problem ist die LIMIT Klausel. Laut SQL-Reference darf da nur ein Wert stehen (row_count) und nicht zwei(offset, row_count), wie z.B. beim SELECT. Ich hab allerdings kein MySQL laufen und verlasse mich hier nur auf die Referenz (was Du im Übrigen auch mal versuchen solltest ;-)).

Mal ganz davon abgesehen, daß ich ohnehin keinen Sinn in der LIMIT Klausel bei UPDATEs sehe. Wenn ich meine Datensätze nicht so referenzieren kann, daß ich mit einem WHERE auch nur die bekomme, die ich tatsächlich ändern will, würde ich mir erstmal Gedanken um mein Datenmodell machen. :-)
 
Zuletzt bearbeitet:
Wenn ich das LIMIT x, x benutzen dürfte wäre das Datenbankdesign eigentlich perfekt, aber dem ist ja antscheinend nicht so.
Trotzdem danke, werd ich mir wohl was anderes überlegen müssen, dabei hatte ich mir das so eigentlich ganz praktisch vorgestellt :-)
Aber kann man nix machen.

Danke,
cAm3eel.
 
Hi nochmal

OK, ich muß mich korrigieren, ORDER BY ist erlaubt.

Siehe hier: http://dev.mysql.com/doc/refman/5.1/en/update.html

LIMIT ist ebenfalls erlaubt, aber eben wirklich nur als LIMIT row_count.

Meiner Meinung nach ist ORDER BY auch nur mit einem LIMIT sinnvoll, da bei einer Beschränkung natürlich schon interessant ist, auf welche n Zeilen ich mich beschränken möchte, nämlich z.B. die ersten 100 (dann ist es wichtig zu wissen in welcher Sortierung die "ersten" stehen)

Ansonsten, also ihne Limit ist es eigentlich egal, in welcher Reihenfolge er die Datensätze aktualisiert.

Gruß
vop
 
Zurück