(MySQL) Tabellen verknüpfen mit UPDATE?
Fabian H.
- datenbank
Hi
Ich habe zwei Tabellen, users und groups.
In der Tabelle users sind, wie der Name schon sagt, verschiedene Benutzer mit ihren Daten abgelegt. Jeder Benutzer kann Mitglied in einer Gruppe der Tabelle groups sein. Nun hat jede Gruppe einen Admin, der in der Spalte "admin" der Tabelle groups gespeichert wird. Jetzt möchte ich von Zeit zu Zeit ein mysql-Befehl ausführen lassen, der bei allen Benutzern, die Gruppenadmin sind, die Spalte "groupadmin" der Tabelle users auf 1 setzt. Das Ganze darf nur ein Befehl sein...
Tabelle users:
name varchar(50)
group varchar(20)
groupadmin int(1)
Tabelle groups:
name varchar(20)
admin varchar(50)
Mein erster Versuch war wie folgt:
UPDATE users SET users.groupadmin = 1 WHERE users.name = groups.admin AND users.group = groups.name;
Doch das geht nicht: Unknown table 'groups' in where clause
Kann mir jemand helfen oder geht das mit UPDATE gar nicht?
Gruss Fabian
Hallo,
Ich habe zwei Tabellen, users und groups.
In der Tabelle users sind, wie der Name schon sagt, verschiedene Benutzer mit ihren Daten abgelegt. Jeder Benutzer kann Mitglied in einer Gruppe der Tabelle groups sein. Nun hat jede Gruppe einen Admin, der in der Spalte "admin" der Tabelle groups gespeichert wird. Jetzt möchte ich von Zeit zu Zeit ein mysql-Befehl ausführen lassen, der bei allen Benutzern, die Gruppenadmin sind, die Spalte "groupadmin" der Tabelle users auf 1 setzt. Das Ganze darf nur ein Befehl sein...Tabelle users:
name varchar(50)
group varchar(20)
groupadmin int(1)Tabelle groups:
name varchar(20)
admin varchar(50)
UPDATE groups INNER JOIN users ON groups.name = users.group SET users.groupadmin = 1 WHERE users.name = groups.admin;
Von der Logik her sollte:
UPDATE users INNER JOIN groups ON users.name = groups.admin SET users.groupadmin = 1;
auch funktionieren.
Aber warum machst Du das nicht gleich, wenn Du festlegst, wer Admin sein soll? Irgendwann muss Du doch mal den Admin-Namen in die Tabelle groups schreiben.
Noch günstiger wäre, statt des Admin-Namens einen numerischen Schlüssel aus der Tabelle users in der Tabelle groups zu speichern.
Tabelle users:
id int(x)---------+
name varchar(50) |
group varchar(20) |
|
Tabelle groups: |
name varchar(20) |
admin int (x)--------+
Wer Admin in welcher Gruppe ist, bekommst Du dann mit:
SELECT groups.name, users.name AS admin FROM users INNER JOIN groups ON users.id = groups.admin
viele Grüße
Axel
Danke vielmals jetzt funktioniert es :)
Das mit der ID ist auch ne gute Idee, bei der nächsten Überarbeitung werde ich das so machen!
Gruss Fabian
Mhh, irgendwie geht es doch noch nicht:
Fehler
SQL-Befehl :
UPDATE groups INNER JOIN users ON groups.name = users.group SET users.groupadmin = 1 WHERE users.name = groups.admin
MySQL meldet:
You have an error in your SQL syntax near 'INNER JOIN users ON groups.name = users.group SET users.groupadmin = 1 WHERE ' at line 1
mach ich was falsch?
Gruss Fabian
Hallo,
Fehler
SQL-Befehl :
UPDATE groups INNER JOIN users ON groups.name = users.group SET users.groupadmin = 1 WHERE users.name = groups.admin
MySQL meldet:
You have an error in your SQL syntax near 'INNER JOIN users ON groups.name = users.group SET users.groupadmin = 1 WHERE ' at line 1
Welche MySQL-Version hast Du? Update mit mehreren Tabellen kann MySQL erst seit 4.0.4.
http://dev.mysql.com/doc/mysql/en/UPDATE.html
Wenn Du eine 4.0.4 oder höher hast, der Fehler aber trotzdem kommt, dann probier mal MySQLs komische INNER JOIN-Syntax:
UPDATE users, groups SET users.groupadmin = 1 WHERE groups.name = users.group AND users.name = groups.admin
viele Grüße
Axel