Löschen von Projekten u. Unterprojekten

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

  • Löschen von Projekten u. Unterprojekten

    morgen allerseits,

    ich habe ein kleines Projekt-Tool gebastelt mit dem ganz einfache
    Projekte angelgt werden können. Diese können wieder Unterprojekte
    bekommen. Läuft alles über eine Tabelle in einer MySQL-DB. Hauptprojekte ahben gleiche UID und Vater-ID. Unterprojekte bekommen (logisch) Vater-ID des Hauptprojektes.

    Wenn ich ein Projekt löschen willl sollen das Projekt und alle folgenden
    Unterprojekte gelöscht werden.

    Kann mir jemand einen Ansatz für die Lösung dieses Problems geben,
    oder einen Link wo Ähnliches beschrieben wird?
    (in Forumsuche noch nix gefunden)

    Gruß
    snoese
    MfG
    Snoese

  • #2
    PHP-Code:
    mysql_query("DELETE * FROM tabelle WHERE id = '$var'"); 

    Wo kämen wir hin, wenn jeder sagte: Wo kämen wir hin? und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen?

    Kommentar


    • #3
      Ich glaub du brauchst eher das hier.


      DELETE mit LEFT JOIN

      http://www.php-resource.de/forum/sho...threadid=54337

      Kommentar


      • #4
        OK,

        ich glaube ich habe vorhin nicht ganz sauber formuliert.
        Das Problem liegt nicht am Löschen selber, sondern an der
        Verschachtelung der Projekte.
        Sind alles 1:n Verschachtelungen.

        d.h. ich weiß also nie wie viele Unterprojekte das zu löschende
        Projekt hat und wie viele diese wieder haben usw.

        warscheinlich brauch ich da ne schleife oder so. bin aber nicht so
        sicher in PHP. deshalb die frage nach dem ansatz. wenn ich den
        grundaufbau hab, krieg ich den rest wohl hin...

        snoese
        MfG
        Snoese

        Kommentar


        • #5
          Wie wäre es denn mit einer rekursiven Funktion, der du immer die aktuelle parent_id übergibst und alle child Einträge eben dieser löschst. Nach dem Prinzip lösche ich Menüpunkte aus meiner Navigation.
          Ansonsten poste doch mal den Aufbau deiner Datanbanktabellen.

          Kommentar


          • #6
            Original geschrieben von Hoschi0815
            Wie wäre es denn mit einer rekursiven Funktion, der du immer die aktuelle parent_id übergibst und alle child Einträge eben dieser löschst. Nach dem Prinzip lösche ich Menüpunkte aus meiner Navigation.
            Ansonsten poste doch mal den Aufbau deiner Datanbanktabellen.
            ... rekursive Funktion sorry...

            ich glaube du meinst genau was ich mir vorgestellt habe.

            wie sieht das als code aus?
            kannste das wohl vom schema posten?

            DB-Tabelle ist ganz einfach:

            Tabelle projekte:
            ---------------------------------------------------------------------------------
            `projekt_id` smallint(5) unsigned NOT NULL auto_increment,
            `vater` smallint(5) unsigned default NULL,
            `titel` varchar(25) NOT NULL default '-Titel-',
            `ersteller` varchar(12) NOT NULL default '',
            `start` datetime NOT NULL default '0000-00-00 00:00:00',
            `ende_soll` datetime default NULL,
            `ende_ist` datetime default '0000-00-00 00:00:00',
            `bearbeiter` varchar(255) default NULL,
            `beschreibung` text,
            `priority` tinyint(3) unsigned NOT NULL default '1',
            `fortschritt` varchar(4) NOT NULL default '0',
            PRIMARY KEY (`projekt_id`),
            KEY `titel` (`titel`)
            ----------------------------------------------------------------------------------

            gruß
            snoese
            MfG
            Snoese

            Kommentar


            • #7
              Ungefähr so sollte die funktion bei dir aussehen:

              PHP-Code:
              function loesche_projekt($projekt_id){

              $sql='SELECT * FROM tbl_projekte WHERE vater='.$projekt_id.'';
              $query=mysql_query($sql) OR DIE (mysql_error());
              $num=mysql_num_rows($query);

              while(
              $row=mysql_fetch_array($query))
                   {
                   
              $projekte[]=$row;
                   }

              for(
              $i=0;$i<$num;$i++)
                 {
                 if(
              $projekte[$i]['projekt_id']!="")
                   {
                   
              $sql_delete='DELETE FROM projekte WHERE projekt_id='.$projekte[$i]['projekt_id'].'';
                   
              $query_delete=mysql_query($sql_delete) OR DIE (mysql_error());
                   
              loesche_projekt($projekte[$i]['projekt_id'];  
              // Funktion verweist auf sich selbst = Rekusion
                   
              }
                  else { echo 
              "Kein Unterprojekt vorhanden";}
                 }

              Aber ich warne dich schon mal vor, wenn ich hier im Forum Code poste schlagen die meisten nur die Hände über den Kopf zusammen
              Zuletzt geändert von Hoschi0815; 24.05.2005, 11:27.

              Kommentar


              • #8
                @Hoschi0815

                Danke Dir!

                Funktioniert wunderbar. War n kleiner tippfehler drin aber sonst alles
                easy.

                Wie gesagt, wenn ich nen Ansatz hab kann ich selbst auch n bisslchen
                basteln. Aber wenn einer so freundlich ist und direkt mal auf die
                DB ne zugeschnittene Funktion postet lacht das Herz.

                *Herz lacht*

                thx

                gruß
                snoese

                P.S.: Wenn einer noch Verbesserungsvorschläge macht wäre doch super...!
                MfG
                Snoese

                Kommentar


                • #9
                  Na freut mich doch, wenn ich ausser zu fragen auch mal antworten kann

                  Kommentar

                  Lädt...
                  X