DELETE FROM t2 LEFT JOIN t1 ... simpel, aber will nicht

Quests Sohn

Mitglied
Hallo,

ich habe trotz Recherche keine Hilfe bei einer - für MySQL-Profis sicher einfache - Frage gefunden:

Ich habe drei Tabellen

  • "anbieter" : anbieterid, name, email, status
  • "angebote" : angebotsid, anbieterid, angebotstext
  • "clicks" : clickid, angebotsid, datum

Wenn sich ein Anbieter deaktiviert, dann sollen alle auf ihn gespeicherten Anzeigen und Klicks gelöscht werden.
Da ganze soll dabei mit möglichst geringen "Arbeitsaufwand" für die DB ablaufen.

Mein laienhafter Versuch sieht aus, wie folgt:

PHP:
		$sql_clicks_loeschen = "DELETE FROM clicks LEFT JOIN angebote ON clicks.angebotsid = angebote.angebotsid WHERE angebote.anbieterid = '" . $anbieterid . "'"; 
		$do_clicks_loeschen = mysql_query($sql_clicks_loeschen); 
		$sql_angebote_loeschen = "DELETE FROM angebote WHERE anbieterid = '" . $anbieterid . "'"; 
		$do_angebote_loeschen = mysql_query($sql_angebote_loeschen); 
		$sql_anbieter_deaktivieren = "UPDATE anbieter SET status = 'inaktiv' WHERE anbieterid = '" . $anbieterid . "'"; 
		$do_anbieter_deaktivieren = mysql_query($sql_anbieter_deaktivieren);

Während die Angebote und der Anbieter gelöscht werden, bleiben die Clicks in der DB.

Was mache ich da falsch? Wie geht es besser?
Ich weiß, dass es mit der folgenden Query klappt, aber das ganze Konstrukt ist doch was zu kompliziert, oder?
Es soll so "ressourcenschonend" wie möglich sein:

PHP:
		$sql_clicks_loeschen = "DELETE FROM clicks WHERE clicks.angebotsid IN (SELECT angebote.angebotsid FROM angebote WHERE angebote.anbieterid = '" . $anbieterid . "')"; 
		$do_clicks_loeschen = mysql_query($sql_clicks_loeschen);


Vielen Dank!
 
Zuletzt bearbeitet:
Hallo,

so sollte es gehen.

SQL:
DELETE clicks c
LEFT JOIN angebote a ON c.angebotsid = a.angebotsid 
WHERE a.anbieterid = '" . $anbieterid . "'"
 
Zuletzt bearbeitet von einem Moderator:
Zurück