Nested-Sets: Alle Einträge eines Astes ohne Untereinträge ausgeben

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

  • Nested-Sets: Alle Einträge eines Astes ohne Untereinträge ausgeben

    Hallo,

    ich habe eine Frage zu Nested-Sets, ich möchte nämlich alle Einträge eines Astes anzeigen lassen, ohne aber dessen Untereinträge zu zeigen, ich will sie also "zusammengeklappt".

    Am besten lässt sich das an einem Beispiel schildern, folgender Baum sei gegeben:
    Code:
    root
    |------ Entry1
    |        |- Entry2
    |        |- Entry3
    |        |
    |        |- Entry4
    |        |  |
    |        |  |- Entry5
    |        |  |  |- Entry6
    |        |  |  `- Entry7
    |        |  |
    |        |  `-Entry8
    |        |
    |        `- Entry9
    |             |- Entry10
    |             `- Entry11
    |
    |------ Entry12
    `----- Entry13
    Ein Szenario wäre, dass ich alle Äste/Blätter ab der Wurzel, ohne Untereinträge anzeigen will. Das Ergebnis sollte also so aussehen:
    Code:
    Entry1
    Entry12
    Entry13
    Das selbe möchte ich jetzt z.B. für Entry4 machen. Das Ergebnis sollte dann wie folgt aussehen:
    Code:
    Entry5
    Entry8

    Ich hoffe, ich könnt mir helfen, schonmal danke im voraus!

  • #2
    keine Datenbankstruktur, kein Code

    Werd dir dann wohl nicht helfen können, hab meine Glaskugel beim Kollegen vergessen

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Wenn du deine Glaskugeln gerne verlegst, solltest du dir die vielleicht mal auf Vorrat kaufen, für Großbesteller gibt es meines Wissens sogar 10% Ermäßigung pro Pfund Glaskugel.

      Naja, entschuldige, aber ich hielt die Datenbankstruktur nunmal für nebensächlich, dass der Baum in einer Tabelle mit rgt- und lft-Werten gespeichert wird, ist selbstverständlich und der Rest irrelevant.

      Aber nun gut, die Datenbank hat eine Tabelle, die folgendermaßen aussieht:
      Code:
      +----------------------------------+
      |   Tabelle: nested_sets_test      |
      +----+-----------------+-----+-----+
      | id |  name           | lft | rgt |
      +----+-----------------+-----+-----+
      |    |                 |     |     |
      |    |                 |     |     |
      |    |                 |     |     |
      |    |                 |     |     |
      |    |                 |     |     |
      +----+-----------------+-----+-----+

      Kommentar


      • #4
        hi waos... im nested sets - modell ist es nicht so einfach, 'children' herauszufinden, ohne gleich den kompletten stammbaum zu bekommen.
        es ist klar, dass du die knotentiefe brauchst. ein 'kind' hat seine lft, rgt zwischen den lft,rgt des elternknotens, und zusätzlich ist seine tiefe(level) genau um eins größer als die tiefe des elternknotens.

        celko macht das mit einem view und damit einem subquery, indem er vom kompletten unterbaum die enkel wieder mit NOT EXISTS entfernt. dürfte nicht sehr effizient sein, arbeitet aber ausschließlich mit den originaldaten.
        in der pear-implementierung ist das effizienter gelöst, indem einfach eine zusätzliche "level"-spalte die absolute knotentiefe im baum angibt. damit hast du bei inserts und updates zwar mehr zu tun, aber die an die kinder zu kommen ist dann trivial.

        grüße
        axo
        Zuletzt geändert von axo; 01.08.2006, 08:59.

        Kommentar

        Lädt...
        X