komplizierte Abfrage

Kalito

Erfahrenes Mitglied
hallo, ich möchte gerne bei einem UPDATE-Befehl einen Wert ändern. Das Problem ist, das ich durch das Programm nur zwei Werte bekomme, was dazu führt, das ich über drei Tabellen gehen muss. Klar könnte ich jetzt in meinen Programm 4 Abfragen schreiben. Würde dies aber gerne mit einer lösen

ich schildere erstmal die Tabellen mit einen Beispielwert:

Tabel User
user id | username | usertype
68 | max.muster | Manager

Tabel JCAA
id | value
16 | 68

Tabel JCAGAM
group_id | aro_id
23 | 16

Table group
id | value
23| Manager

Als übergaben bekomme ich den username (hier max.muster) und das Level(bsp.: Administrator). Ich muss daher in der Tabelle User den usertype ändern, was kein Problem ist. Problematisch wird es eher in der Tabelle JCAGAM. Ich müsste theoretisch einen joint im Set und in der Wherebedingung machen.

Aber so richtig komme ich nicht auf dem nenner, wie ich die Tabelle am besten ändere

Gruß
 
Ich verstehe den Zusammenhang der Tabellen noch nicht so ganz.

Wenn du Max Muster vom "Manager" zum "Administrator" änderst, warum muss dann in der Tabelle "JCAGAM" überhaupt was geändert werden?
 
die group_id der JCAGAM weißt auf die Tabelle group. Dort sind alle Level nochmal seperat gelistet. Ich muss da auch auf Admin umstellen, sonst geht garnichts. Ich finde es auch schwachsinnig, doch muss ich damit Leben.

Der Lange weg würde etwa so gehen (ungetestet):
PHP:
$id = mysql_query("SELECT id FROM JCAA INNER JOIN Users ON JCAA.value=Users.id WHERE username = may.muser")

$level = mysql_query("SELECT id FROM group WHERE value=Administrator")

mysql_query("UPDATE JCAGAM INNER JOIN JCAA ON JCAGAM.aro_id=JCAA.id SET group_id=".$level." Where aro_id=".$id)

Aus den drei Abfragen versuche ich eine zu machen.
 
SQL:
UPDATE
	JCAGAM
SET 
	JCAGAM.group_id = (
			SELECT id 
			FROM group 
			WHERE value=Administrator)
WHERE
	JCAGAM.aro_id = (
			SELECT id 
			FROM JCAA 
			INNER JOIN Users ON JCAA.value=Users.id 
			WHERE username = may.muser)

Könnte gehen...
 
Zuletzt bearbeitet von einem Moderator:
Hab es hinbekommen

Man musste in der WHERE-Bedingung die id bei Select genau definieren.

Danke

Code:
UPDATE
    JCAGAM
SET 
    JCAGAM.group_id = (
            SELECT id 
            FROM GROUP 
            WHERE VALUE=Administrator)
WHERE
    JCAGAM.aro_id = (
            SELECT JCAA.id 
            FROM JCAA 
            INNER JOIN Users ON JCAA.VALUE=Users.id 
            WHERE username = 'may.muser')
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück