Nested Sets
am 17.07.2006 19:36:11 von Oliver Benning
Hallo,
ich habe eine Nested Set Tabelle-A, aus der ich bereits alle notwendigen
Daten innerhalb eines SELECT Statements abfragen kann, um einen Baum
korrekt grafisch darstellen zu können.
Jetzt habe ich eine weitere Tabelle-B, in der zu jedem Blatt
n-Datensätze zugeordnet werden können. Ich möchte diese Tabelle nun dazu
verwenden, um den Baum zu filtern. Es sollen nur die Blätter angezeigt
werden, die auch wirklich mindestens einen Eintrag in Tabelle-B
besitzen.
Das Problem ist, wie stelle ich sicher, daß ein Blatt z.B. auf Level3
komplett mit allen darüberliegenden Wurzeln dargestellt wird, auch wenn
die Wurzeln selbst keine Zuordnungen in TabelleB haben? Mein bisheriger
Ansatz mit einem JOIN und WHERE TabelleB.id IS NOT NULL liefert mir
wirklich nur die Blätter, nicht den Pfad bis dorthin.
Gruß,
Oliver
Re: Nested Sets
am 17.07.2006 22:27:07 von Martin Klaffenboeck
Am Mon, 17 Jul 2006 19:36:11 +0200 schrieb Oliver Benning:
> Hallo,
>
> ich habe eine Nested Set Tabelle-A, aus der ich bereits alle notwendigen
> Daten innerhalb eines SELECT Statements abfragen kann, um einen Baum
> korrekt grafisch darstellen zu können.
>
> Jetzt habe ich eine weitere Tabelle-B, in der zu jedem Blatt
> n-Datensätze zugeordnet werden können. Ich möchte diese Tabelle nun dazu
> verwenden, um den Baum zu filtern. Es sollen nur die Blätter angezeigt
> werden, die auch wirklich mindestens einen Eintrag in Tabelle-B
> besitzen.
>
> Das Problem ist, wie stelle ich sicher, daß ein Blatt z.B. auf Level3
> komplett mit allen darüberliegenden Wurzeln dargestellt wird, auch wenn
> die Wurzeln selbst keine Zuordnungen in TabelleB haben? Mein bisheriger
> Ansatz mit einem JOIN und WHERE TabelleB.id IS NOT NULL liefert mir
> wirklich nur die Blätter, nicht den Pfad bis dorthin.
Zeig mal so ein Query und wir helfen dir beim verfeinern.
Ich würde die eigene Tabelle nochmal hinzufügen und dann dann noch mit OR
weitere WHERE's hinzufügen.
Martin
Re: Nested Sets
am 17.07.2006 23:25:43 von Dominik Echterbruch
Oliver Benning wrote:
> Hallo,
>
> ich habe eine Nested Set Tabelle-A, aus der ich bereits alle notwendigen
> Daten innerhalb eines SELECT Statements abfragen kann, um einen Baum
> korrekt grafisch darstellen zu können.
>
> Jetzt habe ich eine weitere Tabelle-B, in der zu jedem Blatt
> n-Datensätze zugeordnet werden können. Ich möchte diese Tabelle nun dazu
> verwenden, um den Baum zu filtern. Es sollen nur die Blätter angezeigt
> werden, die auch wirklich mindestens einen Eintrag in Tabelle-B besitzen.
>
> Das Problem ist, wie stelle ich sicher, daß ein Blatt z.B. auf Level3
> komplett mit allen darüberliegenden Wurzeln dargestellt wird, auch wenn
> die Wurzeln selbst keine Zuordnungen in TabelleB haben? Mein bisheriger
> Ansatz mit einem JOIN und WHERE TabelleB.id IS NOT NULL liefert mir
> wirklich nur die Blätter, nicht den Pfad bis dorthin.
OK, in Anbetracht der Uhrzeit nur schnell ein paar kleine Denkanstöße:
- Rechtswert abzüglich Linkswert ist bei Blättern immer 1
- Mit einer hinreichend neuen Version von MySQL kannst du Subselects
machen und darauf auch JOINen
- DISTINCT hilft dir beim Subselect
Hoffe, das hilft schon mal weiter.
Grüße,
Dominik
--
Norbert Melzer in d.c.d.mysql:
F: Wie verstehe ich diese FAQ am besten?
A: Studieren Sie Datanbank-Design und lesen Sie anschliessend alles nochmal