Seite 1 von 1

UPDATE der Usertabelle für User einer best. Gruppe

Verfasst: 13.07.2008 21:31
von mad-manne
Hallo Leute,
ich bastle grade an einer Sache, wo ich für alle Benutzer einer bestimmten Benutzergruppe ein Feld in der USER-Tabelle updaten möchte. Ich habe jetzt folgendes Query, was soweit ich es beurteilen kann auch funktioniert. Da ich aber nur eine recht kleine Testmenge an Datensätzen habe, fände ich es schön, wenn ein paar SQL-Experten was dazu sagen könnten ...

Es geht, wie die Experten anhand des Queries wohl feststellen können um ein phpBB 2.x !

Hier mein Code:

Code: Alles auswählen

$sql = "UPDATE " . USERS_TABLE . " u, ". USER_GROUP_TABLE ." ug
	SET u.user_force_profile_update = 1
	WHERE ug.group_id = $group_id
	AND u.user_id = ug.user_id";
Vielen Dank für euer Feedback,
Manne.

Verfasst: 13.07.2008 21:38
von Pyramide
Ein Nachteil der Variante ist, dass sie nur unter MySQL funktioniert. Eine allgemeinere Variante wäre:

Code: Alles auswählen

$sql = "UPDATE " . USERS_TABLE . "
   SET u.user_force_profile_update = 1
   WHERE user_id IN (SELECT user_id FROM " . USER_GROUP_TABLE ." WHERE group_id = $group_id");

Verfasst: 13.07.2008 21:51
von mad-manne
Pyramide hat geschrieben:Eine allgemeinere Variante wäre:
Hi Pyra ... ich war mir sicher, dass du einer von denen bist, die eine bessere Lösung kennen :D
Das Query sieht so auch viel sauberer aus, da ich ja in der Tat nur die USER-Tabelle update und nicht auch die USER_GROUP-Tabelle.

Ein kleiner Typo hatte sich bezgl. der Position des schliessenden " eingeschlichen, was hinter der Klammer des geschachtelten SELECTS stehen muss. Die korrekte Syntax lautet also:

Code: Alles auswählen

$sql = "UPDATE " . USERS_TABLE . "
   SET user_force_profile_update = 1
   WHERE user_id IN (SELECT user_id FROM " . USER_GROUP_TABLE ." WHERE group_id = $group_id)";
Gruss und Danke,
Manne.