Delete gruppiert
Mazze
- datenbank
Hallöchen zusammen und ein schönes neues Jahr!
Folgendes Problem eines MYSQL-DELETE-Statements beschäftigt mich seit einger Zeit:
Tabelle Objekte:
id | wert
Tabelle Unterobjekte
id | objekt_id
(objekt_id ist die Zuordnung zu id in der oberen Tabelle)
Nun sollen alle Einträge in "Objekte" gelöscht werden, die den wert "foo" haben und alle Einträge in "Unterobjekte", deren Objekt-ID mit denen in "Objekte" übereinstimmt, die gelöscht werden sollen (die eben den wert "foo" haben).
Ich hatte gehofft, dass es so funktionieren könnte:
DELETE FROM Objekte o, Unterobjekte u WHERE o.wert = "foo" AND u.objekt_id = o.id
Klappt aber leider nicht so.
Hat jemand von Euch eine Idee, wie das machbar ist?
Vielen Dank,
Mazze
yo,
Nun sollen alle Einträge in "Objekte" gelöscht werden, die den wert "foo" haben und alle Einträge in "Unterobjekte", deren Objekt-ID mit denen in "Objekte" übereinstimmt, die gelöscht werden sollen (die eben den wert "foo" haben).
zum einen könnte man mit foreign keys arbeiten, die einem genau das abnehmen. ich bin mir nicht sicher, ab welcher version mysql fk constraints unterstützt und unter welcher engine. schau einfach mal in der doku nach.
zum anderen kannst du dir mal folgenden syntax für multiple tabellen anschauen.
http://dev.mysql.com/doc/refman/5.1/en/delete.html
Ilja
echo $begrüßung;
DELETE FROM Objekte o, Unterobjekte u WHERE o.wert = "foo" AND u.objekt_id = o.id
Gemäß Handbuchkapitel zur DELETE Syntax (speziell Multiple-table syntax) sind die Tabellen in denen gelöscht werden soll vor dem FROM anzugeben. Die Angabe nach dem FROM bezieht sich auf die für die Ermittlung der Datensätze benötigen Verknüpfungen.
Es gibt noch eine zweite Syntax mit DELETE FROM ... USING ... WHERE ...
echo "$verabschiedung $name";