php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.05.2011, 11:51  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Fortgeschritten
seb_ befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] (Dynamischer) DELETE über mehrere Tabellen

Habe eine MYSQL DB im MyISAM Format. In InnoDB wäre das über FKeys relativ einfach möglich nur kommt das hier nicht in Frage.

Folgende Konstellation:

Habe 2 Tabellen aus dehnen ich anhand einer "oid"(einer anderen Tabelle3) Daten löschen möchte. Nun zum Begriff dynamisch: Beide Tabellen können Einträge mit der oid enthalten müssen dies aber nicht. Für diese Situation bekomme ich kein brauchbares MySQL Statement hin. Weder lt. Dokumentation noch über JOIN's (habe nun 8 Varianten versucht, aber stets erfolglos).

Die Grundlegende Idee ist:
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id

Nur löscht er je nach Anweisung aber immer nur aus einer Tabelle oder wenn beide Tabellen Einträge der "oid" enthalten, aus Beiden. Soweit auch logisch, jedoch nicht das was ich möchte.

Ich bräuchte ungefähr soetwas:
DELETE FROM t1 OR t2 USING t1, t2, t3 WHERE (t1.oid=t3.id OR t2.oid=t3.id) AND t3.id = ?;

Danke im Voraus für eure Mühe!

€dit: Mir fällt kein logische Zuordnung ein. Entweder könnte es MySQL nicht zuordnen oder aber die Bedingung kann so einfach nicht erfüllt werden. Ich denke ich werde das mit 2 Query's umsetzen müssen...

Beispiel (x = enthalten | - = kein Eintrag):
-. t1|t2|t3
1. x | -| x
2. - | x| x
3. x | x| x

Zudem kann t2 auch mehrere Einträge mit der "oid" enthalten.

Geändert von seb_ (29.05.2011 um 11:59 Uhr).
seb_ ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.05.2011, 12:02  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Ich bin nicht ganz sicher, ob ich Deine Datenstruktur richtig verstehe, aber mir scheint es, als ob Du einfach falsch herum joinst. Baue in der From-Clause einen Left Join von T3 auf T2 und T1. Danach sollte es möglich sein, T1 und T2 als zu löschende Tabellen anzugeben.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 29.05.2011, 17:29  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Fortgeschritten
seb_ befindet sich auf einem aufstrebenden Ast
Standard

Danke für deine rasche Antwort, habs nun 2 weitere Stunden versucht, jedoch ohne Erfolg. Spätestes wenn t1 keinen Eintrag enthält oder aber t2 mehrere versagt das Ganze. Falls jemand sonst noch eine brauchbare Idee hat nur her damit.

MfG
seb_ ist offline   Mit Zitat antworten
Alt 29.05.2011, 17:52  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von seb_ Beitrag anzeigen
Habe 2 Tabellen aus dehnen ich anhand einer "oid"(einer anderen Tabelle3) Daten löschen möchte. Nun zum Begriff dynamisch: Beide Tabellen können Einträge mit der oid enthalten müssen dies aber nicht.
Und was heisst das "müssen aber nicht"? Kannst du klar definieren, wann ein Eintrag aus t2 oder t3 gelöscht werden soll oder nicht?
Zitat:
Zitat von seb_ Beitrag anzeigen
DELETE FROM t1 OR t2 USING t1, t2, t3 WHERE (t1.oid=t3.id OR t2.oid=t3.id) AND t3.id = ?;
Das ist natürlich Blödsinn. Trenn es in zwei separate Abfragen auf.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 29.05.2011, 18:04  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Fortgeschritten
seb_ befindet sich auf einem aufstrebenden Ast
Standard

Hab die Lösung:

Code:
DELETE 
			t3, t2, t1
FROM 
			tabell3 AS t3
LEFT JOIN 
			tabell2 AS t2 ON t2.oid = t3.id
LEFT JOIN 
			tabell1 AS t1 ON t1.oid = t3.id
WHERE 
			t3.id = ?
Bleibt für mich nur die Frage, warum das Gleiche zuvor (komplett) ohne Alias nicht geklappt hat. Danke dennoch vielmals!

MfG

Geändert von seb_ (29.05.2011 um 18:23 Uhr).
seb_ ist offline   Mit Zitat antworten
Alt 29.05.2011, 18:13  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Fortgeschritten
seb_ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Und was heisst das "müssen aber nicht"? Kannst du klar definieren, wann ein Eintrag aus t2 oder t3 gelöscht werden soll oder nicht?
So wie ich schrieb. Der Löscheintrag erfolgt nur, wenn es an einer Stelle zu einem Fehler kam, jedoch speichere ich nicht an welcher, da ohnehin alle Daten gelöscht werden sollen (welche zusammengehören). Und die t2 kann mehrere Einträge enthalten.

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Das ist natürlich Blödsinn. Trenn es in zwei separate Abfragen auf.
Ich weiss das dies Blödsinn war, daher bat ich um Hilfe. Und zwei Abfragen wollte ich aus Performancegründen nicht, auch wenn das ganze wohl nie zum tragen kommt, das spielt aber bei meiner Programmierung keine Rolle!

Ich hoffe dir ist hiermit, zum Verständnis, noch geholfen. MfG
seb_ ist offline   Mit Zitat antworten
Alt 29.05.2011, 18:21  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Zitat:
Zitat von seb_ Beitrag anzeigen
Bleibt für mich nur die Frage, warum das Gleiche zuvor (komplett) ohne Alias nicht geklappt hat.
Das währe vielleicht zu beantworten, würdest Du uns keinen Phantasiecode zeigen.

Und: Dein Code passt nicht zur initialen Problembeschreibung. Dein T1 ist auf einmal das T3 von vorhin, oder? Und aus dem willst Du doch eigentlich nicht löschen.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 29.05.2011, 20:19  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Fortgeschritten
seb_ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Jens Clasen Beitrag anzeigen
Code passt nicht zur initialen Problembeschreibung. Dein T1 ist auf einmal das T3 von vorhin, oder? Und aus dem willst Du doch eigentlich nicht löschen.

Gruß Jens
Habe die Lösung bereits nachträglich editiert und abgeändert. Da ich es (t1/t3) mit Öffnung des Thread's selbst verdreht hatte. Das Löschen von T3, hab ich Anfangs nicht erwähnt, dass ist korrekt, änderte aber an der Tatsache nicht viel (lediglich ein JOIN mehr).

Zitat:
Zitat von Jens Clasen Beitrag anzeigen
Das währe vielleicht zu beantworten, würdest Du uns keinen Phantasiecode zeigen.
Kein PhantasieCode die Tabellennamen sind lediglich bzgl. einer besseren Darstellung in t1-t3 umbenannt. Habe den Code von vorhin sogar noch da, und den Fehler gefunden. Natürlich Eigenverschulden, denn ich habe statt t1.oid / t2.oid fälschlicherweise t1.id / t2.id geschrieben.

Korrekt also so:
Code:
DELETE 					
                tabell3,
                tabell2,
		tabell1
FROM
       		tabell3 
LEFT JOIN 
		tabell2 ON tabell2.oid = tabell3.id				
LEFT JOIN 
		tabell1 ON tabell1.oid = tabell3.id
WHERE  
		tabell3.id = ?
Dennoch Danke für das Interesse!
seb_ ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL Statement über mehrere Tabellen scoops Datenbanken 4 15.12.2010 21:25
[Erledigt] JOIN über 3 Tabellen + 2 m:n Tabellen dennis81 Datenbanken 7 08.12.2010 15:36
Datenbankabfrage über 3 Tabellen typhoch2 Datenbanken 2 05.12.2010 22:08
[Erledigt] SELECT über zwei Tabellen (INNER JOIN) und Ausgabe von verglichener a_i ID MeckiDerIgel Datenbanken 6 09.11.2010 01:31
MySQL-Update über mehrere Tabellen djlars PHP Tipps 2010 2 02.11.2010 16:47
Abfrage von 3 Tabellen über odbc?! pfump Datenbanken 11 27.10.2010 08:58
[Erledigt] mehrere Tabellen über PHP script aus Datenbank auslesen alphabetisch... Janela Datenbanken 17 02.09.2010 20:18
abfrage über mehrere tabellen mit einer bedingung DarkThunder PHP Tipps 2007 6 15.04.2007 17:13
SELECT über zwei Tabellen KingCrunch Datenbanken 9 23.03.2007 04:01
DELETE Über mehrere Tabellen und Einträge pchero Datenbanken 12 16.03.2007 02:43
Join-Abfrage über mehrere Tabellen sinai Datenbanken 3 04.02.2006 13:05
Query über 3 Tabellen? jensK Datenbanken 4 12.01.2006 08:44
Select über mehrere tabellen Sclot Datenbanken 14 24.11.2005 16:56
Suchfkt. über mehrere Felder und 2 Tabellen Lia PHP Tipps 2005 14 11.01.2005 16:32
Abfrage über 3 Tabellen PHP Tipps 2004 3 31.07.2004 22:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql delete from 2 tabellen, mysql join tabellenname dynamisch, datensätze aus mehrere tabellen löschen anhand id, delete from mehrere tabellen, delete abfrage mit mehreren tabellen, datensatz aus dynamischer tabelle löschen, mysql dynamisch delete, delete über mehrere tabellen, delete from von mehreren tabellen, delete from auf mehrere tabellen, php löschen über zwei tabellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum