Bademeister: Nested Sets - Ebene auslesen (SQL)

Beitrag lesen

Aber ich verstehe überhaupt nicht warum die Anzahl der Oberhalb liegenden?

Datenbank sieht so aus:
id name lft rgt

  • Oberkategorien (1,18)
      - Kommunikation (2,11)
        - Kommunikationstheorien (3,8)
          - Paul W. (4,5)
          - Schulz von Thun (6,7)
        - Kommunikationswissenschaften (9,10)
      - Sport (12,13)
      - Esoterik (14,15)
      - Lifestyle (16,17)

So. Ich möchte folgendes auslesen: Kommunikation, Sport, Esoterik, Lifestyle.

Und der Grund, warum Du diese auslesen moechtest, ist die eine Eigenschaft, die sie verbindet: die haben dasselbe Level, sprich, dieselbe Anzahl von daruebliegenden Knoten - naemlich je einen (den Knoten "Oberkategorien"). Oder?
Dies ist also die Eigenschaft, die Du beim Auslesen als Bedingung (in der WHERE-Klausel) testen willst.

Ich möchte _nicht_ auslesen was _in_ diesen Kategorien ist (z.B. Kommunikationstheorien.

Deswegen hat ja auch keiner gesagt, dass Du die unterhalb davon liegenden Knoten angucken sollst :-)

Zuerst lese ich mit einem Select die LFT und RGT Werte von "Oberkategorien" aus. Also $lft=1 und $rgt=18.

Ich empfehle kein "zuerst", das kann man in einer Abfrage machen (und sollte dies auch, denn "in echt" muss man ansonsten gut aufpassen, dass die Werte aus der ersten Abfrage nicht schon wieder falsch sind, wenn man die zweite Abfrage ausfuehrt).

Vielleicht haben wir ja ein Verständnis-Problem meiner seits was Ober/Unterhalb bedeutet.

Oberkategorien ist für mich oberhalb von Kommunikation. P. Watzlawik ist für mich unterhalb von Kommunikation.

Genau.

Wenn ich also jetzt Kommunikation, Sport etc. auslesen möchte - da sagt irh mir ich soll die Knoten oberhalb zählen?

Genau.

Da ist aber doch nur noch "Oberkategorien".

Genau.

"Finde die Anzahl aller Knoten, die ueber dem gefragten Knoten liegen."
0

Nein. Das war so gemeint: Fuer jeden Knoten, ueberlege erstmal, wie Du sein Level bestimmst. Dies tust Du, in dem Du die darueberliegenden knoten zaehlst. Und wenn Du weisst, wie Du das Level bekommst, kannst Du eine SQL-Abfrage der Form

"Gib mir alle Knoten, deren Level gleich 1 ist."

ganz leicht schreiben. Der erste Schritt zum Verstaendnis waere also eine Abfrage, die auf deutsch heisst:

"Gib mir Namen und Level aller Knoten". Level gibt es als Feld nicht in der Datanbank, muss also per Subselect oder Join ermittelt werden.

Ich bin einfach schwer verwirrt. Ich bekomms nicht hin.

Das sind wohl die meisten, wenn sie mit "Nested Sets" Bekanntschaft machen, keine Sorge. Aber das Essentielle fast jeder Abfrage von Nested Sets ist, dass man die Verschachtelung dabei mitgeliefert bekommt, d.h. genau das Level bestimmt. Das ist genau das, worum es geht, daher lohnt es sich, dass Du da ein richtiges Verstaendnis fuer entwickelst. Wo hast Du denn das mit den Nested Sets her?

Viele Gruesse,
der Bademeister