Mehrere WHERE Angaben für MySQL?

S-lord

Mitglied
Hey,

ich möchte gern mehrere WHERE Angaben bei einem UPDATE Befehl setzen. Google sagt mir auch, dass sich das per AND verknüpfen lässt, leider funktioniert es in meinem Fall nicht.

PHP:
			$sql = "UPDATE " . $item . " Set expired = '0' WHERE expired = '1' AND WHERE id = '" . $id . "'";
			mysql_query($sql);
			mysql_free_result($ergebnis);
			$sql = "UPDATE " . $item . " Set expired = '1' WHERE expired = '0' AND WHERE id = '" . $id . "'";
			mysql_query($sql);
			mysql_free_result($ergebnis);

Was ist hier falsch? Wie kann ich das vielleicht auch eleganter lösen? Die Zahl in der DB soll ja einfach entweder von 1 auf 0 oder umgekehrt umspringen.
Wenn ich diese 2. WHERE Bedinung weg lasse funktioniert der Befehl übrigens, setzt dann aber wirklich nur 0, erkennt natürlich auch nicht, ob es 0 oder 1 ist und stellt auf das Gegenteil um:

PHP:
$sql = "UPDATE " . $item . " Set expired = '0' WHERE id = '" . $id . "'";
 
PHP:
$sql = "UPDATE
    `".$item."`
SET
    `expired` = !`expired`
WHERE
    `id` = ".$id;
// [...]

Das Schlüsselwort "WHERE" darf nur einmal vorkommen. Wenn es sich bei den Zahlen immer nur um 0 und 1 handelt, kannst du diese einfach per ! "umdrehen".
 
Danke erstmal, aber du hast ja jetzt alles mit ' Hochkommas geschrieben, was ich für gewöhnlich nicht mache, es aber trotzdem funktioniert. Was hat es also mit dieser Schreibweise auf sich? Zumal du ´ nimmst, und ich ', wo liegt der Unterschied?
 
Zuletzt bearbeitet:
Das was du in ' einschließt, sind Strings. Das was er in ` einschließt, sind die Namen der Spalten. Viele Leute haben sich die Schreibweise angewöhnt, weil man dann auch Schlüsselwörter wie z.B. "from" also Spaltenname nutzen kann.
Um deine eigentliche Frage nochmal zu beantworten:
PHP:
$sql = "UPDATE " . $item . " Set expired = '0' WHERE expired = '1' AND id = '" . $id . "'";
Alles was zwischen dem WHERE und dem nächsten Block kommt ist ein einziger boolescher Ausdruck. Deshalb nur einmal WHERE schreiben und alle Ausdrücke mit AND,OR, XOR etc. verknüpfen (ggf. Klammern setzen).
 
Ein Abrufbefehl an anderer Stelle bei mir lautet aber beispielsweise:

PHP:
$sql = 'SELECT * FROM news ORDER BY date DESC LIMIT 5';

Und auch da funktioniert der Abruf reibungslos, wobei dort weder die einen noch die anderen Hochkommas stehen.
 
Du verwendest " und ' sobald du etwas als Text in den Query schreibst. Die Backticks ` verwendet man dann, wenn eine Spalte, Tabelle oder ein Alias (AS) den Namen eines Schlüsselwortes (FROM, WHERE, LIMIT, etc) hat. MySQL weiß dann, dass es in diesem Fall kein Schlüsselwort ist. Ohne die Backticks würde es zu einem Fehler kommen.

Ist einfach eine Gewohnheit von mir das immer zu tun, auch wenn es sich nicht um ein Schlüsselwort handelt.
 
Ok also sind die Backticks mehr oder weniger optional.
PHP:
WHERE expired = '1'

Hier muss ich aber Hochkommas setzen, auch bei Integern, ja? Und bei Variablen ebenso!?:

PHP:
WHERE expired = '$zahl'

Danke euch! =)
 
Bei Zahlen musst du keine setzten, zumindest nicht dann, wenn das Feld einen Zahlentyp hat. Wie es bei Texttypen ist, kann ich ohne testen nicht sagen, aber ich schätze mal, dass MySQL das versteht. Nur bei Text müssen Anführungszeichen / Hochkommata verwendet werden.

Bei Variablen ist es genau so. Wenn in der Variable Text ist, musst du es darin einpacken, bei Zahlen nicht.
 
Zurück