php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 15-09-2012, 22:32
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard mehrere tabellen löschen?

hallo!

ich versuche datensätze aus 5 verschiedenen tabellen mit einmal zu löschen.

Code:
mysql_query("DELETE FROM bilder,bilder2,bilder3,bilder4,bilder5 WHERE `bilder`.`ID` = '$DS[$i]' OR `bilder2`.`BID` = '$DS[$i]' OR `bilder3`.`BID` = '$DS[$i]' OR `bilder4`.`BID` = '$DS[$i]' OR `bilder5`.`BID` = '$DS[$i]'");
dies klappt jedoch nicht.

auch nicht mit:

Code:
mysql_query("
DELETE 
FROM bilder 
LEFT JOIN bilder2 ON bilder2.BID = bilder.ID 
LEFT JOIN bilder3 ON bilder3.BID = bilder.ID 
LEFT JOIN bilder4 ON bilder4.BID = bilder.ID 
INNER JOIN bilder5 ON bilder5.BID = bilder.ID 
WHERE `bilder.ID` = '$DS[$i]'");
und mit INNER JOIN wollte es auch nicht klappen.

ich habe eine haupttabelle "bilder" und in den tabellen bilder2 - bilder5 sind zusätze gespeichert.

mal existiert ein datensatz mal nicht (tab2-5).

die variable $DS[$i] enthält die BildID.

es wird noch nicht mal in der haupttabelle (bilder) etwas gelöscht, obwohl dort def. der eintrag existiert.

wenn ich es nur so schreibe:

mysql_query("DELETE FROM bilder WHERE `ID` = '$DS[$i]'");

klappt es (aber es wird nur aus der haupttabelle gelöscht -> ist ja klar).

ich verstehe das problem nicht, sitze seit 2 std. dran.

jemand eine idee was hier "kaputt" ist?
Mit Zitat antworten
  #2 (permalink)  
Alt 15-09-2012, 22:41
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wenn es das Problem hergibt, und die DB ordendlich normalisiert ist, dann kann MySQL einiges für dich automatisch erledigen.
MySQL :: MySQL 5.1 Referenzhandbuch :: 14.2.6.4 Fremdschlüssel-Beschränkungen
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 16-09-2012, 06:30
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

also mit dem link von dir komm ich nicht klar, da blicke ich überhaupt nicht durch.

ich habe es direkt in sql rein geschrieben und gemerkt, das er mit der kombination aus tabellennamen UND Spalte nicht klar kommt:

DELETE FROM bilder WHERE `bilder.ID` = '11414'

wenn ich es so schreibe:

DELETE FROM bilder WHERE `ID` = '11414'

klappt es.

so auch bei tab2-tab5

nur wenn ich es mit einmal löschen will, dann brauche ich doch die 1. variante, da ich ja die tab angeben muß und dann die spalte.

komisches problem.

Code:
DELETE bilder,bilder2
FROM bilder 
INNER JOIN bilder2 
WHERE bilder2.BID = '405' OR bilder.ID = '405'
problem hierbei:

wenn ich es mit AND verknüpfe löscht er nur, wenn in beiden tabellen ein datensatz mit der BildID 405 drin steht (logisch durch das AND).

wenn ich OR mache, löscht er 0 datensätze, obwohl in beiden tabellen jeweils 1 DS mit der ID 405 drin steht.

AND kann ich aber nicht machen, da ja in Tab2 nicht immer ein passender DS vorhanden ist für den DS aus Tab1.


hmm im notfall muß ich es einzeln machen (5 DELETE zeilen)


dann habe ich es nochmal direkt in SQL versucht und ich MUß bei DELETE die bedingung angeben:

Geändert von Gamer20 (16-09-2012 um 08:00 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 16-09-2012, 07:46
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

So:
Code:
DELETE bilder FROM bilder WHERE `bilder.ID` = 11414
So ähnlich stehts zumindest im Handbuch
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 16-09-2012, 10:09
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

hmm ja das kenne ich alles, ich habe mal im netz geschaut. anscheinend klappt das bei dem DELETE befehl nicht, in der haupttabelle den DS zu löschen UND in den tab 2-5 optional den DS, wenn vorhanden, zu löschen.

der löscht dann nur, wenn dort auch die DS vorhanden sind. da kann ich AND oder OR schreiben, das klappt alles nicht.

deshalb habe ich jetzt 5 einzelne SQL Zeilen geschrieben, für jede tabelle einzeln.

so klappts erstmal, ich weiß es ist unnötiger balast für den server, aber anscheinend gehts nicht anders.

mit select geht das alles (wenn ich aus einer den tab's auslese -> tab1 den DS und aus tab2-5 die werte, WENN sie vorhanden sind), DELETE stellt sich bis jetzt quer bzw. auf stur (bei UPDATE habe ich es jetzt noch nicht versucht).
Mit Zitat antworten
  #6 (permalink)  
Alt 16-09-2012, 10:34
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Dein Datenbankdesign ist kaputt. Tabellen sollten nicht durchnummeriert werden. Gleichartige Datensätze gehören in eine Tabelle.
Mit Zitat antworten
  #7 (permalink)  
Alt 16-09-2012, 10:40
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

hmm dan hätte ich aber 7 spalten mehr in der 1. tabelle und einen haufen 0 werte drin stehen. da das andere ja nur viele zusatzdinge sind, die der nutzer mit anlegen, füllem bzw. aktivieren kann.
Mit Zitat antworten
  #8 (permalink)  
Alt 16-09-2012, 10:52
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gamer20 Beitrag anzeigen
hmm dan hätte ich aber 7 spalten mehr in der 1. tabelle und einen haufen 0 werte drin stehen. da das andere ja nur viele zusatzdinge sind, die der nutzer mit anlegen, füllem bzw. aktivieren kann.
Dann solltest du dir wenigstens sinnvolle Tabellennamen überlegen. Durchnummerieren ist Quatsch. Da versteht niemand, was die Tabellen unterscheidet.

Du kannst übrigens auch die Bilder in einer Tabelle speichern und Zusatzinformationen, die du nicht bei jedem Datensatz benötigst in anderen Tabellen.
Mit Zitat antworten
  #9 (permalink)  
Alt 16-09-2012, 11:20
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

1. programmiee ich alleine und daher weiß ich was was ist. und selbst wenn ich entsprechende namen hätte, würde das problem trotzdem nicht beheben.

2. ist es genau das was du schreibst.

1 tabelle enthält das bild
die anderen tabellen die zusatzinfos, einstellungen usw.

ich müßte dann es so machen, das ich, wenn das bild hoch geladen wird, auch in den zusätzlichen tabellen (ob nun 4 oder nur 1 (wenn ich es in eine "zusatztabelle" zusammen fasse)), gleich ein datensatz mit angelegt wird und wenn es nur ein leerer ist. das wollte ich auch vermeiden.

da ja vielleicht 1/3 der nutzer zusätzlich was speichert bzw. extra einstellt.

dann hätte ich bei 1000 datensätzen 666... sinnlose datensätze in der zusatztabelle.

und ich hatte es auch durch probiert mit der haupttabelle und nur tab2 (tabelle 3-5 habe ich mal in meinen tests weg gelassen).

und da klappts ja auch nicht. der löscht mir dann 0 datensätze, obwohl in Tab1 das bild drin ist und in tab2 kein passender Datensatz drin ist.

also müßte ja SQL (in phpmyadmin in dem menu SQL für die befehle) ja drin stehen, das 1 datensatz gelöscht wurde (weil in tab1 zumindest etwas gefunden wurde). aber der löscht 0 datensätze.
Mit Zitat antworten
  #10 (permalink)  
Alt 16-09-2012, 11:36
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gamer20 Beitrag anzeigen
1. programmiee ich alleine und daher weiß ich was was ist.
Tja, sobald du den Code in einem Forum postest, arbeitest du eben nicht mehr alleine. Also wenn dein Code nie deine vier Wände verlässt und nur du ihn zu sehen bekommst, ist es deine Entscheidung, was du damit anstellst (auch wenn es nicht sinnvoll ist und du einige Monate oder Jahre später vermutlich selber nicht mehr weißt, was du dir damals dabei gedacht hast). Aber sobald den Code auch andere Programmierer lesen können, muss dieser auch lesbar geschrieben sein! Das heißt sauber formatiert, in englischer Sprache (Programmierer sind international) und mit sinnvollen Benennungen.

Zitat:
Zitat von Gamer20 Beitrag anzeigen
und ich hatte es auch durch probiert mit der haupttabelle und nur tab2 (tabelle 3-5 habe ich mal in meinen tests weg gelassen).

und da klappts ja auch nicht. der löscht mir dann 0 datensätze, obwohl in Tab1 das bild drin ist und in tab2 kein passender Datensatz drin ist.

also müßte ja SQL (in phpmyadmin in dem menu SQL für die befehle) ja drin stehen, das 1 datensatz gelöscht wurde (weil in tab1 zumindest etwas gefunden wurde). aber der löscht 0 datensätze.
Bei so einer verwirrenden Beschreibung steige ich aus. Dafür ist mir meine Zeit zu schade. Überleg dir erstmal sinnvolle Namen. Mir ist dieses Gewurschtel mit Tabelle 1 bis 5 einfach nur unnötig umständlich.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Über mehrere Tabellen löschen sfischer SQL / Datenbanken 6 03-08-2010 19:44
Mehrere Datensätze ändern / löschen phpnueling SQL / Datenbanken 5 29-05-2006 14:30
Über mehrere Tabellen löschen ! tdmf SQL / Datenbanken 8 20-01-2005 17:50
mehrere daten löschen? JOat PHP Developer Forum 4 24-02-2002 11:14
Was ist sinnvoller mehrere Datenbanken oder mehrere Tabellen? jochen5000 SQL / Datenbanken 2 20-02-2002 22:20

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:49 Uhr.