Und nochmal: Nested Sets...

mAu

Erfahrenes Mitglied
Hallo liiiebe Community *schleimschleim* ;)
Ich benutze für mein Forum jetzt NestedSets, um Unterforen beliebiger Ebene zu erstellen. So, jetzt will ich aber einen sogenannten Breadcrumb-Navigation einbauen (also diese tolle Navigation, die ihr auch hier oben seht "Forum > Programming > PHP..."). Wie stell ich es nun an, dass ich mit einem SQL-Statement den Pfad bis zu dem Forum mit der ID, sagen wir mal 5, auslese?
Code:
Main
+Forum 1 (id: 1)
++Unterforum 1/1(id:2)
+++Unterforum 1/1/1(id:3)
++Unterforum 1/2(id:4)
++Unterforum 1/3(id:5) <--
+Forum 2(id: 6)
Ich will lediglich "Forum1 > Unterforum 1/3" da stehen haben, nichts anderes. Mehr als die ID (hier: 5...) soll auch nicht übergeben werden. Hab mir jetzt hier schon den Kopp zerbrochen... Vielleicht wisst ihr ja Rat. Ansonsten speicher ich den Weg, den der User gegangen ist in einer Session ab, sollte aber jetzt für mich nur ne Notlösung darstellen...
Danke,
Mau
 
Ich zieh' nur mal das wichtigste raus:
Code:
+----------+--------------+------------+-----+-----+
| board_id | board_rootid | board_name | lft | rgt |
+----------+--------------+------------+-----+-----+
|        1 |            1 |       Root |   1 |   8 |
|        2 |            1 |    Forum 1 |   2 |   5 |
|        3 |            1 | Subforum1/1|   3 |   4 |
|        4 |            1 |    Forum 2 |   6 |   7 |
+----------+--------------+------------+-----+-----+
 
Probier mal Folgendes:
Code:
SELECT
        `b`.`board_name`

  FROM
        `NestedSet` `a`,
        `NestedSet` `b`

  WHERE
        `b`.`lft` <= `a`.`lft`
    AND `b`.`rgt` >= `a`.`rgt`
    AND `a`.`board_id` = 3

  ORDER BY
        `a`.`lft`
 
Hallo,

Gumbo hat gesagt.:
Probier mal Folgendes:
Code:
SELECT
        `b`.`board_name`

  FROM
        `NestedSet` `a`,
        `NestedSet` `b`

  WHERE
        `b`.`lft` <= `a`.`lft`
    AND `b`.`rgt` >= `a`.`rgt`
    AND `a`.`board_id` = 3

  ORDER BY
        `a`.`lft`
Hier hat sich ein kleiner Fehler eingeschlichen: sortiert werden sollte natürlich nach `b`.`lft`, da `a`.`lft` für jede Ergebniszeile denselben Wert besitzt. Eine richtige Sortierung wäre daher eher Zufall.

Grüße,
Matthias
 
Danke fuer die Antwort. Ich hock leider grad in der Schule fest. Ich melde mich, sobald ich es daheim ausprobieren konnte! Ich hatte es vorher schon so aehnlich...:
SQL:
`b`.`lft`
    BETWEEN `a`.`lft` AND `a`.`rgt`
    AND `a`.`board_id` = 3

Nachtrag
Hat wunderbar geklappt, danke!
 
Zuletzt bearbeitet:
Zurück