Aktionsabfrage mit update und join bzw. inner join
Caballo
- datenbank
0 Timo L.0 caballo0 Vinzenz Mai
1 Vinzenz Mai
Hallo und frohe Ostern an alle.
Ich bekomme das einfach nicht hin und bitte um Unterstützung.
Das folgende zeigt mir genau das an, was ich auch sehen möchte,
all User die in der Gruppentabelle der Gruppe 6617 zugeordnet sind.
SELECT * FROM phpbb\_users
INNER JOIN phpbb_user_group
ON phpbb_users.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617
Nun möchte ich in Tabelle phpbb_users von allen oben ausgewählten das Feld user_active verändert, auf 0 setzen
Ich dachte mir das geht in etwa so.
UPDATE phpbb\_users\_bck
INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617
SET user_active=0
geht aber leider nicht !!
Wer weiß Rat ?
Vielen Dank
Hallo und frohe Ostern an alle.
Danke, gleichfalls :-)
UPDATE
phpbb\_users\_bck
INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617
SET user_active=0
Sollte eigentlich möglich sein, sofern du mindestens Mysql 4 installiert hast.
Vielleicht musst du für die Spalte user_active noch die Tabelle angeben (tabelle.user_active).
Falls du MyPhpAdmin verwendest wäre es für mich auf jeden Fall hilfreich wenn du noch den im Sql Abfragefenster angezeigten Fehler hier Posten würdest.
Vielleicht hilft dir aber auch schon der folgende Artikel weiter:
Cross Table Update
Gruss Timo
Hallo,
ich habe das gerade wie folgt noch einmal probiert.
UPDATE phpbb\_users\_bck
INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0
die Fehlermeldung lautet
#1064 - 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 'WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0' at line 2
Vielen Dank
Hallo,
UPDATE
phpbb\_users\_bck
INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0
#1064 - 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 'WHERE phpbb_user_group.group_id =6617 SET phpbb_users_bck.user_active=0' at line 2
wie ich Dir bereits mitteilte, ist an dieser Stelle die WHERE-Klausel nicht erlaubt. Korrigiere die Reihenfolge der Klauseln.
Freundliche Grüße
Vinzenz
Danke für die Nachricht,
Wo muss den die Where Klausel hin ?
Ich habe jetzt einiges dazu gelesen,
jedoch wegen meinem mangelhaften Englisch nicht alles aus den Handbüchern u. Beispielen verstanden !
UPDATE phpbb\_users\_bck
WHERE phpbb_user_group.group_id =6617 INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id SET phpbb_users_bck.user_active=0
So jedenfalls funktioniert es auch nicht!
UPDATE phpbb\_users\_bck
SET phpbb_users_bck.user_active=0 WHERE phpbb_user_group.group_id =6617 INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
So leider auch nicht !
UPDATE phpbb\_users\_bck
SET phpbb_users_bck.user_active=0 INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id WHERE phpbb_user_group.group_id =6617
Und so leider auch nicht !
Könnte mir daher jemand meine Aktions-Abfrage so umstellen/ korrigieren, das sie auch funktioniert ?
Vielen Dank
Hi,
Danke für die Nachricht,
Wo muss den die Where Klausel hin ?Ich habe jetzt einiges dazu gelesen,
jedoch wegen meinem mangelhaften Englisch nicht alles aus den Handbüchern u. Beispielen verstanden !
Abgesehen davon, dass du eigentlich nur dem Syntaxdiagram folgen musst - gibt es die Beschreibung der Update-Syntax im MySQL-Handbuch auch auf Deutsch.
MfG ChrisB
OK,
ich habe es heute abermals probiert...
UPDATE phpbb_users_bck , phpbb_user_group SET phpbb_users_bck.user_active=0
WHERE phpbb_user_group.group_id =6617
Es ging sogar ohne Fehlermeldung durch. !! Hurra !!
Nur jetzt wird von allen User_id in phpbb_users_bck das user_active auf 0 gesetzt.
Das wollte ich so nicht,
sondern nur von den User_id die in phpbb_user_group eine group_id von 6617 besitzen, der user_active sollte in phpbb_users_bck auf 0 gesetzt werden.
Man, was ist das kompliziert. !!
Ich finde es ja nett und auch ausgepochen freundlich,
das ihr mir wenigstens auf das deutsche Handbuch helft,
aber weiß denn sonst niemand wie man das schreiben muss,
damit genau das passiert was ich möchte ?
Wie kann ich nun in phpbb_users_bck anstell von alle, nur die betreffenden user_id zur Veränderung der user_active auswählen ?
Danke
Hallo,
UPDATE phpbb_users_bck , phpbb_user_group SET phpbb_users_bck.user_active=0
WHERE phpbb_user_group.group_id =6617
Nur jetzt wird von allen User_id in phpbb_users_bck das user_active auf 0 gesetzt.
sondern nur von den User_id die in phpbb_user_group eine group_id von 6617 besitzen, der user_active sollte in phpbb_users_bck auf 0 gesetzt werden.
dann solltest Du den INNER JOIN nicht durch einen CROSS JOIN (das kartesische Produkt der beiden beteiligten Tabellen) ersetzen.
Da die Tabellenreferenzen in der UPDATE-Anweisung zuerst kommen, bedeutet dies
UPDATE
phpbb_users_bck
INNER JOIN
phpbb_user_group
ON
phpbb_users.user_id = phpbb_user_group.user_id
SET
-- [...]
WHERE
-- [Deine Bedingung]
Dein CROSS JOIN sorgt dafür, dass es für jeden Datensatz in php_users_bck mindestens einen passenden Datensatz in der Tabelle phpbb_user_group gibt, für den Deine WHERE-Klausel nicht passt: infolgedessen werden alle Datensätze aktualisiert. Das ist zu erwarten.
Freundliche Grüße
Vinzenz
Hallo,
Nun möchte ich in Tabelle phpbb_users von allen oben ausgewählten das Feld user_active verändert, auf 0 setzen
UPDATE
phpbb\_users\_bck
INNER JOIN phpbb_user_group ON phpbb_users_bck.user_id = phpbb_user_group.user_id
WHERE phpbb_user_group.group_id =6617
SET user_active=0
geht aber leider nicht !!
verständlicherweise geht dies nicht. Die Reihenfolge der einzelnen Klauseln ist in SQL genau vorgegeben, siehe MySQL-Handbuch, UPDATE-Syntax.
Freundliche Grüße
Vinzenz