Multi DELETE – Einfach tabellenübergreifend löschen

In einem relationalem Datenbanksystem kommt es ja des öfteren vor, dass Tabellen über ihre Schlüssel verbunden sind. Nehmen wir als Beispiel ein einfaches News System mit einer Kommentar-Funktion. Der eigentliche News Artikel wird dabei in einer Tabelle mit dem Namen News gespeichert. Die Kommentare zu diesem Artikel werden neben dem eigentlichen Artikel in einer zweiten Tabelle „NewsKommentare“ gespeichert. Beide Tabellen sind über die ID eines News Artikels miteinander verbunden. Hier kommt Multi Delete – einfach tabellenübergreifend löschen ins Spiel.

Bisher war es so, dass das Löschen eines Artikels eine aufwendige Aneinanderreihung von DELETE Anweisungen nach sich zog, um die Datenbank wirklich von allen mit dem eigentlichen Artikel zusammenhängenden Elementen zu bereinigen. Für mich als Entwickler war’s also jede Menge Code. Nach einem zufälligen Blick in die MySQL Dokumentation habe ich dann herausgefunden, dass die JOIN Syntax auch bei DELETE Anweisungen möglich ist, um über mehrere Tabellen hinweg mit einem einzigen Query zu löschen.

Beispiel:

try {
	$sql = "
		DELETE
			news.*,
			comments.*
		FROM
			corestyleNews AS news
		LEFT JOIN
			corestyleNewsComments AS comments ON news.newsID = comments.cmtNewsID
		WHERE 
			news.newsID = :newsID 
	";
	$stmt = Admin::getDB()->prepare($sql);
	$stmt->bindParam(':newsID', $newsID, PDO::PARAM_INT);
	$stmt->execute();
			
	if ($stmt->rowCount()) {
		throw new Exception('Der Artikel und die Kommentare wurden gelöscht.');
	} else {
		throw new Exception('Der Artikel wurde nicht gelöscht.');
	}
} catch (PDOException $e) {
	die($e->getMessage());
}

In diesem Beispiel finden wir die bereits oben erwähnten Tabellen News und Kommentare wieder. Es wird hier nun ein News Artikel gelöscht und gleichzeitig werden auch die dazugehörigen Kommentare aus der Kommentar-Tabelle gelöscht. Der Bezüg wird hier mittels einer JOIN Syntax über den Schlüssel newsID hergestellt. Somit ist es möglich mit einem Query über zwei Tabellen hinweg zu löschen. Einfach und Effektiv und spart zu dem jede Menge Code, denn es müssen nicht zwei Queries abgesetzt werden.

3 Gedanken zu „Multi DELETE – Einfach tabellenübergreifend löschen“

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.