MSQL Nested Sets, Vorgänger ermitteln
Norbert
- datenbank
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?
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
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)
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.