wie macht mans am besten?

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

  • #31
    @tbt: du brauchst aber 2 Tables, richtig?
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

    Kommentar


    • #32
      ja, ich brauche 2 Tabellen
      TBT

      Die zwei wichtigsten Regeln für eine berufliche Karriere:
      1. Verrate niemals alles was du weißt!


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #33
        @tbt: habe mich wohl falsch ausgedrückt. Ich meinte, man braucht grundsätzlich 2 Tabellen, um mit einem SQL-Statement rekursiv hochzugehen, richtig?
        Sunshine CMS
        BannerAdManagement
        Borlabs - because we make IT easier
        Formulargenerator [color=red]Neu![/color]
        Herkunftsstatistik [color=red]Neu![/color]

        Kommentar


        • #34
          1 Tabelle reicht da doch

          select *
          from tab a1
          inner join tab a2 on ( ... )
          inner join tab a3 on ( ... )
          ...
          inner join tab an on ( ... )
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #35
            @tbt: so wie ich das sehe, pro inner join = eine ebene, richtig?
            SELECT b.* FROM `bb_content` b INNER JOIN bb_content bb ON (b.c_id=bb.c_parentid)
            so würde ich alle ebenen bekommen, das will ich aber nicht, sondern nur von einer bestimmten unterebene nach oben alle ebenen.
            Sunshine CMS
            BannerAdManagement
            Borlabs - because we make IT easier
            Formulargenerator [color=red]Neu![/color]
            Herkunftsstatistik [color=red]Neu![/color]

            Kommentar


            • #36
              @tbt: wie machst du das beim Löschen, wenn du von einer oberen Ebene alle nach unten gehenden Ebenen löschen willst? Dein Delete wird doch sicher ein Join haben oder? Wenn ja, wie sieht der aus?
              Sunshine CMS
              BannerAdManagement
              Borlabs - because we make IT easier
              Formulargenerator [color=red]Neu![/color]
              Herkunftsstatistik [color=red]Neu![/color]

              Kommentar


              • #37
                PHP-Code:
                function deletePoint$point ) {
                        
                // Infos des Menü-Punkts auslesen
                        
                $tmp $this->db->single' SELECT sort_i, parent_i, level_i FROM '.$this->menu.'
                                                    WHERE '
                .$this->menuid.' = '.$point );
                        
                // alle Unterpunkte suchen und loeschen
                        
                $this->db->select'    SELECT child_i
                                                FROM '
                .$this->menumenu.'
                                                WHERE parent_i = '
                .$point'sub' );
                        if( 
                $this->db->rows'sub' ) ) {
                            
                $t = array();
                            while( 
                $row $this->db->fetch'sub' ) ) {
                                
                $t[] = $row['child_i'];
                            }
                            
                $this->db->free'sub' );
                            
                $this->db->query'    DELETE FROM '.$this->menumenu.'
                                                WHERE child_i IN ( '
                .implode', '$t ).' ) ' );
                            
                $this->db->query'    DELETE FROM '.$this->menu.'
                                                WHERE '
                .$this->menuid.' IN ( '.implode', '$t ).' ) ' );
                        }
                        
                // Punkt loeschen
                        
                $this->db->query'    DELETE FROM '.$this->menumenu.'    WHERE child_i = '.$point );
                        
                $this->db->query'DELETE FROM '.$this->menu.' WHERE '.$this->menuid.' = '.$point );
                        
                // Menü neu sortieren
                        
                $this->db->query'    UPDATE '.$this->menu.' SET
                                                sort_i = sort_i - 1
                                            WHERE
                                                sort_i > '
                .$tmp['sort_i'].'
                                                AND parent_i = '
                .$tmp['parent_i'].'
                                                AND level_i = '
                .$tmp['level_i'] );
                        
                // Uebergeordnete ID zurückgeben
                        
                return $tmp['parent_i'];
                    } 
                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #38
                  Habs mit 2 Querys gelöst:

                  PHP-Code:
                  $this->_db->query("DELETE c, cp FROM {prefix}content_structure cs
                  INNER JOIN {prefix}content c ON ( cs.c_id='"
                  .$i."' AND (c.c_id = cs.child_id OR c.c_parentid = cs.child_id))
                  LEFT JOIN {prefix}content_properties cp ON (cp.c_id=c.c_id)
                  LEFT JOIN {prefix}permissions p ON (p.id=c.c_id AND p.`module`='content')"
                  );
                                      

                  $this->_db->query("DELETE cs, cs2 FROM {prefix}content_structure cs 
                  INNER JOIN {prefix}content_structure cs2 ON (cs2.c_id=cs.child_id)
                  WHERE cs.c_id='"
                  .$i."'"); 
                  Sunshine CMS
                  BannerAdManagement
                  Borlabs - because we make IT easier
                  Formulargenerator [color=red]Neu![/color]
                  Herkunftsstatistik [color=red]Neu![/color]

                  Kommentar


                  • #39
                    Sorry, dass ich den Beitrag nochmal nach oben hole. Aber ich wurde auf diesen Verwiesen. Euer Code klappt ganz gut, doch irgendwie wird bei mir nur die höchste Ebene angezeigt. Allerdings will ich (OHNE Benutzerrechte einfach nur so) alle aufgeklappten Ebenen anzeigen. Könnt ihr mir da weiterhelfen. Ich habe folgende Tabellenstruktur gewählt: (Aus Beitrag 1)


                    menu
                    ========
                    menu_id ( Menupunkt )
                    parent_id ( übergeordneter Menupunkt, oder 0 wenn ganz oben )
                    level ( Baumtiefe )
                    sort ( Sortierung bei nebeneinander liegenden Menupunkten )

                    Reicht das? Habe auch mit den zwei Tabellen ausprobiert. Klappt aber nicht so ganz. Wie bekomm ich das möglichst Performat hin, dass er mir alle benötigten Ebenen aufklappt. (Wie Windows Explorer)

                    Gruß
                    Holger

                    Kommentar


                    • #40
                      menu_menu
                      =========
                      menu_id ( Menupunkt )
                      child_id ( alle untergeordneten Menupunkte )
                      Ich verstehe nicht, was genau die Tabelle eigentlich macht.
                      Kann mir das jemand erklären?

                      Wäre sehr dankbar dafür
                      Tempim.de - Dein kostenloser Bildhoster
                      Tipps und Tricks für Webmaster

                      Kommentar


                      • #41
                        In der Tabelle speicherst du für jede Ebene sämtliche IDs der darunter folgenden Ebenen.

                        Beispiel:

                        Code:
                        Ebene 1.0.0 - ID 1
                        Ebene 1.1.0 - ID 2
                        Ebene 1.2.0 - ID 3
                        Ebene 1.1.1 - ID 4
                        Ebene 1.1.2 - ID 5
                        Ebene 2.0.0 - ID 6
                        Ebene 2.2.0 - ID 7
                        In der Tabelle würdest du jetzt folgende Werte haben

                        Code:
                        menu_id - child_id
                        1.........1
                        1.........2
                        1.........3
                        1.........4
                        1.........5
                        2.........2
                        2.........4
                        2.........5
                        3.........3
                        4.........4
                        5.........5
                        6.........6
                        6.........7
                        7.........7
                        Sunshine CMS
                        BannerAdManagement
                        Borlabs - because we make IT easier
                        Formulargenerator [color=red]Neu![/color]
                        Herkunftsstatistik [color=red]Neu![/color]

                        Kommentar


                        • #42
                          die Tabelle verkettet alle Eltern mit allen Kindern und umgedreht
                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar


                          • #43
                            Ah, ok...
                            Danke für die Antworten!

                            Wie muss denn die Abfrage aussehen, wenn ich keine Rechteprüfung möchte?
                            Nur die Ausgabe eines Menus...

                            So sieht mein DB-Design aus, aber ich komme nicht auf die Abfrage. Habe nichtmal nen Ansatz

                            --
                            -- Tabellenstruktur für Tabelle `menus`
                            --

                            CREATE TABLE IF NOT EXISTS `menus` (
                            `menu_id` mediumint(8) NOT NULL auto_increment,
                            `name` varchar(100) NOT NULL,
                            PRIMARY KEY (`menu_id`)
                            ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

                            --
                            -- Daten für Tabelle `menus`
                            --

                            INSERT INTO `menus` (`menu_id`, `name`) VALUES
                            (1, 'Ebene 1.0.0'),
                            (2, 'Ebene 1.1.0'),
                            (3, 'Ebene 1.2.0'),
                            (4, 'Ebene 1.1.1'),
                            (5, 'Ebene 1.1.2'),
                            (6, '2.0.0'),
                            (7, '2.2.0');

                            -- --------------------------------------------------------

                            --
                            -- Tabellenstruktur für Tabelle `menu_menu`
                            --

                            CREATE TABLE IF NOT EXISTS `menu_menu` (
                            `id` mediumint(8) NOT NULL auto_increment,
                            `parent_id` mediumint(8) NOT NULL,
                            `child_id` mediumint(8) NOT NULL,
                            PRIMARY KEY (`id`)
                            ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;

                            --
                            -- Daten für Tabelle `menu_menu`
                            --

                            INSERT INTO `menu_menu` (`id`, `parent_id`, `child_id`) VALUES
                            (1, 1, 1),
                            (2, 1, 2),
                            (3, 1, 3),
                            (4, 1, 4),
                            (5, 1, 5),
                            (6, 2, 2),
                            (7, 2, 4),
                            (8, 2, 5),
                            (9, 3, 3),
                            (10, 4, 4),
                            (11, 5, 5),
                            (12, 6, 6),
                            (13, 6, 7),
                            (14, 7, 7);
                            Zuletzt geändert von Seggl-hoch-drei; 04.05.2009, 17:07.
                            Tempim.de - Dein kostenloser Bildhoster
                            Tipps und Tricks für Webmaster

                            Kommentar

                            Lädt...
                            X