Norbert: MSQL Nested Sets, Vorgänger ermitteln

Nachdem ich mich mit array rumgeschlagen habe, kommt nun mein nächstes Problem

ich befasse mich mit dem Hierarchischen Aufbau, als Grundlage dient mir die Seite:

http://www.klempert.de/nested_sets/

nun ist meine Strukru schon ziemlich gross, un um den Durchblick besser zu  zubekommen, möchte ich zu jedem Menüpunkt den direkten Vorfahren ermitteln

1.Kategorie1
2._Kategorie2
3.__Kategorie3
4.___Kategorie4
5.Kategorie5
6._Kategorie6
7.__Kategorie7
8.___Kategorie8

Also zum Beispiel von Katgeorie4 möchte ich Kategorie3 ermitteln

SELECT p.*  
FROM kategorien n, kategorien p  
WHERE  
n.lft BETWEEN p.lft AND p.rgt  
AND n.id = 4  
ORDER BY n.lft;  

nun gibt mir aber meine Abfrage alles aus.

Kategorie1, Kategorie2, Kategorie3, Kategorie4

was nicht schleht ist, wenn man den Pfrad haben möchte, aber in meinem Fall will ich nur Kategorie3 ermitteln.

Weis jemand, wie ich meine Abfrage auf die eine Ausgabe beschränken kann?

  1. Weis jemand, wie ich meine Abfrage auf die eine Ausgabe beschränken kann?

    Naja ich weiß nicht genau wie deine Tabelle aussieht bzw was left und right andeuten soll.
    Spontan würde mir einfallen, in der Menüstruktur eine zusätzliche Spalte "parent" anzugeben, und Menüpunkt auf 1. layer/root hätte einfach null, und dann speicherst du die id des Vorgängers rein
    z.B.

    1 | Kategorie1 | null
    2 | Kategorie2 | 1
    3 | Kategorie3 | 2

    falls du sowas in die richtung machen möchtest.

    Was genau sollen die underscores darstellen? also ___Kategorie3

    1. Naja ich weiß nicht genau wie deine Tabelle aussieht bzw was left und right andeuten soll.

      Das sind Nested Sets. Eine Webseite dzau wurde ja schon angegeben.

      Spontan würde mir einfallen, in der Menüstruktur eine zusätzliche Spalte "parent" anzugeben, und Menüpunkt auf 1. layer/root hätte einfach null, und dann speicherst du die id des Vorgängers rein

      Eine Spalte parent ist ja bei Nested Sets gerade *nicht* notwendig.

      Was genau sollen die underscores darstellen? also ___Kategorie3

      Ich nehme an, der Level (also wieviele Ebenen man von der Wurzel entfernt ist)

  2. Tach!

    möchte ich zu jedem Menüpunkt den direkten Vorfahren ermitteln
    Also zum Beispiel von Katgeorie4 möchte ich Kategorie3 ermitteln

    Die Vorfahren sind die Datensätze, bei denen L kleiner und R größer als die eigenen ist - oder anders formuliert und wie in deinem Code zu sehen: wenn das eigene L innerhalb von L und R der anderen ist. Man kann sich da auf die Betrachtung des eigenen L einschränken. Jedenfalls die Ergebnisse sortiert nach L absteigend und limitiert auf 1 bringt den nächsthöheren.

    dedlfix.