2009-05-27 7 views
1

Ich hoffe, jemand kann mir helfen - haben Sie eine hierarchische Einrichtung auf einem Tisch mit den ganzen START WITH und CONNECT BY Klauseln, die ich verwende, um ein vertikal ausgerichtetes Menüsystem einzurichten, das auf die erweitern kann rechts, abhängig davon, ob eine Menüoption Kinder und die Gesamtzahl der Ebenen enthält. Als Teil der Menüoption, wenn ein Elternteil Kinder hat, zeige ich auch ein '>' Symbol an, um dies zu spezifizieren.CONNECT_BY_ISLEAF mit Bedingungen

Meine Frage ist, verwende ich CONNECT_BY_ISLEAF zu bestimmen, ob eine Menüoption ein Blatt ist oder nicht, aber ich habe auch eine Spalte in meiner hierarchischen Tabelle, die angibt, ob die eine Menüoption aktiv ist oder nicht.

Also, wenn ich einen Fall eines Eltern/Kind-Set-up in meinem Menü, so dass der ISLEAF Wert für Parent ist 0 und Child1 ist, aber ich habe tatsächlich machte das Kind Menüpunkt inaktiv, mein '>' Symbol wird weiterhin auf der übergeordneten Ebene angezeigt, obwohl der untergeordnete Datensatz für dieses übergeordnete Element inaktiv ist.

Eine Idee, wie ich dies zusammen mit dem CONNECT_BY_ISLEAF Wert prüfen kann, um zu verhindern, dass das Symbol '>' erscheint, obwohl diese Eltern-Menüoption einen inaktiven Kind-Datensatz hat?

Im Grunde wollen Sie etwas, das, wenn ein Child-Datensatz basierend auf ISLEAF Wert existiert, aber Kind-Datensatz inaktiv ist, dann ignorieren diese Blatt Datensatz und so tun, als ob es tatsächlich nicht existiert.

Hope das macht Sinn.

Danke. TT.

Antwort

2
SELECT * 
FROM table 
CONNECT BY 
     parent = PRIOR id 
     AND active = 1 

Dies wird ein Kind nur auswählen, wenn es aktiv ist, wenn das was Sie wollen.

Beachten Sie, dass diese Abfrage CONNECT_BY_ISLEAF = 1 für die Elemente zurückgibt, die keine aktiven untergeordneten Elemente haben, und sie werden wahrscheinlich als Endpunkte in Ihrem Entwurf behandelt.

+0

Dank Quassnoi - habe nicht erkannt, dass Sie Bedingungen auf dieser Ebene hinzufügen können. Alles gut jetzt. – tonyf