mehrere tabellen löschen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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?

  • #2
    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

    Kommentar


    • #3
      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:
      Zuletzt geändert von Gamer20; 16.09.2012, 08:00.

      Kommentar


      • #4
        So:
        Code:
        DELETE bilder FROM bilder WHERE `bilder.ID` = 11414
        So ähnlich stehts zumindest im Handbuch
        Wir werden alle sterben

        Kommentar


        • #5
          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).

          Kommentar


          • #6
            Dein Datenbankdesign ist kaputt. Tabellen sollten nicht durchnummeriert werden. Gleichartige Datensätze gehören in eine Tabelle.

            Kommentar


            • #7
              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.

              Kommentar


              • #8
                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.

                Kommentar


                • #9
                  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.

                  Kommentar


                  • #10
                    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 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.

                    Kommentar

                    Lädt...
                    X