MySql - UPDATE mit Zugriff auf andere Tabellen

spectre

Grünschnabel
Hallo Zusammen.

Ich habe zwei tabellen t1 und t2

Relevant in t1 ist id (welche eine user id enthält) und cpc (Anzahl an credit punkten des users).

Relevant in t2 ist ctag (bestimmte anzahl an credit points, welche sich im laufe des tages verändert), protag (fixe anzahl an credit points welche zur verfügung steht), intervall (welches den Wert 1 haben muss um das gewünschte update durchzuführen) und user (welches der user id aus t1 entspricht).

Mittels cronjob möchte ich nun alle 24 Stunden die ctag mit dem Wert aus protag updaten vorausgesetzt die anzahl aus cpc ist mindestens so groß wie die protag vom entsprechendem User.
Wenn ja soll eben ctag auf den wert von protag gesetzt werden und zeitgleich cpc aus t1 um den Wert von protag verringert werden.

Irgendwie so müsste es aussehen vermutlich ... wäre super wenn mir da jemand weiterhelfen könnte.

PHP:
UPDATE users SET users.cpc = cpc - (SELECT protag FROM facebook WHERE facebook.user = users.id) WHERE (SELECT protag FROM facebook WHERE user = users.id) <= cpc AND intervall = 1
UPDATE facebook SET tag = protag WHERE (SELECT `coins` FROM `users` WHERE `id` = `facebook`.`user` ) >= `protag` AND Intervall = 1

Schonmal vielen Dank im Voraus:
 
Zuletzt bearbeitet:
Als erstes. Sei mal ganz ehrlich. Kannst du dein SQL-Statement so lesen? Wenn ja - Hut ab. Ich gratuliere
Ich kann es nicht. Darum hab ich mal als erstes dein nicht funktionierendes SQL in ein lesbares Format geändert
SQL:
UPDATE 
	users 
SET 
	users.cpc = cpc - (
		SELECT 
			protag 
		FROM
			facebook
		WHERE
			facebook.user = users.id
	) 
WHERE
	(
	 	SELECT 
		 	protag 
		FROM 
			facebook
		WHERE
			user = users.id
	) <= cpc 
	AND intervall = 1
UPDATE 
	facebook 
SET
	tag = protag
WHERE 
	(
		SELECT 
			`coins` 
		FROM 
			`users` 
		WHERE 
			`id` = `facebook`.`user` 
	) >= `protag` 
	AND Intervall = 1
Also, jetzt sehe ich, dass t1 die Tabelkle users ist und t2 facebook
Dann willst du in etwa sowas
SQL:
UPDATE
	users 		AS u,
	facebook 	AS f
SET
	u.cpc = u.cpc - f.protag,
	f.ctag = f.protag
WHERE
	u.id = f.user
	AND  f.intervall = 1;
 
Zuletzt bearbeitet von einem Moderator:
Zurück