Nested Sets parent_id Modell

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

  • Nested Sets parent_id Modell

    Hey,

    habe mich an ein Nested Modell gewagt inspiriert durch TBTs menu_menu.

    angestrebte Situation:
    Ich wollte hiermit eine Treenavigation erstellen bei welcher ich mich durch die verschiedenen Bäume durchklicken kann, so dass der jeweilige aktive Baum stets geöffnet bleibt.

    Problemmatik:
    Dies hat bis zur zweiten Ebene problemlos funktioniert, jedoch bei der dritten Ebene gab mir mein offensichtlich falsches SQL Statment nur noch die erste Ebene und die dritte Ebene zurück, so dass meine rekursive Funktion die Navigation nur noch bis zur ersten Ebene vollziehen konnte.

    Meine Überlegungen endeten in einer Sackgasse, dass mein vorhaben mit diesem Modell überhaupt möglich ist.....

    Eine Aufklärung disbezüglich würde mir schon denke ich Klarheit verschaffen.......

    Meine Tables Dumps: (menus)

    Code:
    +---------+----------------+-----------+-----------+-------+------+
    | menu_id | menu_name      | mod       | parent_id | level | sort |
    +---------+----------------+-----------+-----------+-------+------+
    |       1 | Verwaltung     |           |         0 |     1 |    1 |
    |       2 | Sessionverw.   |           |         1 |     2 |    2 |
    |       3 | Memberverw.    | member    |         1 |     2 |    1 |
    |       5 | Module         |           |         0 |     1 |    2 |
    |       6 | GB             |           |         5 |     2 |    2 |
    |       7 | News           |           |         5 |     2 |    1 |
    |       8 | Download       |           |         5 |     2 |    3 |
    |       9 | Irgendwas      |           |         5 |     2 |    4 |
    |      10 | Navigation     |           |         0 |     1 |    3 |
    |      23 | Kategorieverw. | categorie |         1 |     2 |    3 |
    |      25 | Add Member     |           |         3 |     3 |    1 |
    |      26 | Edit Member    |           |         3 |     3 |    2 |
    +---------+----------------+-----------+-----------+-------+------+
    (menus_has_menus)
    Code:
    +---------+----------+
    | menu_id | child_id |
    +---------+----------+
    |       1 |        0 |
    |       5 |        0 |
    |      10 |        0 |
    |       2 |        1 |
    |       3 |        1 |
    |      23 |        1 |
    |      25 |        3 |
    |      26 |        3 |
    |       6 |        5 |
    |       7 |        5 |
    |       8 |        5 |
    |       9 |        5 |
    +---------+----------+
    Das Problem ergibt sich wenn man von Verwaltung -> Memberverw. -> Add Member || Edit Member geht. Ich sehe kein Merkmal mit welchem ich zum gewünschten Ergebnis kommen kann leider
    [color=blue]MfG Payne_of_Death[/color]

    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
    [color=red]Merke:[/color]
    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

    Murphy`s Importanst LAWS
    Jede Lösung bringt nur neue Probleme
    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

  • #2
    die einträge in "menus_has_menus" sind unvollständig. jeder eintrag kann ein parent sein, daher muss jede id auch mit child_id 0 vorhanden sein.

    schau dir den thread von tbt bzw. happy nochmal an, ich hatte ein vollständiges beispiel gepostet (hatte vorher dasselbe problem )
    Kissolino.com

    Kommentar


    • #3
      *juhu* bin nicht der einzige mit dem Problem

      Wenn ich das jetzt richtig verstehe brauche ich je Menüpunkt grundsätzlich immer einen Datensatz mit child 0, je nachdem ob er noch einen Vater hat folgt ein weiterer Datensatz....

      Muss ich nachher gleich mal testen
      [color=blue]MfG Payne_of_Death[/color]

      [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
      [color=red]Merke:[/color]
      [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

      Murphy`s Importanst LAWS
      Jede Lösung bringt nur neue Probleme
      Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
      In jedem kleinen Problem steckt ein großes, das gern raus moechte.

      Kommentar


      • #4
        Nicht nur die 0 fehlt in menu_has_menu, sondern noch viele andere!

        In der menu_has_menu müssen für jede ID alle übergordneten ID's beginnend bei 0 abgelegt werden. Wenn du als so ein Menu hast

        ID Menupunkt

        1 1.
        2 1.1
        3 1.1.1

        mußt du in die menu_has_menu folgendes eintragen

        parent child
        0 1 - 1. Menupunkt
        0 2 - 2. Menupunkt
        1 2
        0 3 - 3. Menupunkt
        1 3
        2 3

        Noch perfomanter funktioniert es, wenn die SQL Konstruktionen darauf hin umgestellt werden, dass kein "or" mehr verwendet wird. Dann benutzt MySQL auch die Indizes korrekt.
        Um dies zu erreichen, sind dann noch die mit sich selbst verbundenen Einträge in der menu_has_menu zu tätigen.

        1 1
        2 2
        3 3
        TBT

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


        PHP 2 AllPatrizier II Browsergame

        Kommentar

        Lädt...
        X