Hallo!
> Ich habe einen Table mit folgender Strukur
>
> [project_id],[parent_project_id]
>
> Dieses erlaubt einen tree zu gestalten.
>
> Nun wie kann ich am schnellsten per SQL diesen tree
> ausgeben lassen?
Da gibt es mehrere M�glichkeiten, aber richtig elegant kann man das nur
mit SQL Server und Stored Procedures l�sen. Hier aber ein "universelles
Beispiel" f�r beliebige Datenbanken mit einem Unterprogramm, das
rekursiv aufgerufen wird:
<%
option explicit
call treeMenu(0, 0)
sub treeMenu(byval pParent, byval pLevel)
dim rm: set rm = Server.CreateObject("ADODB.Recordset")
rm.Open "select * from project where parent_project_id = " & pParent,
db, adOpenStatic, adLockReadOnly, adCmdText
do while not rm.Eof
Response.Write(...)
call treeMenu(rm.Fields("project_id").value, pLevel + 1
rm.MoveNext
loop
rm.Close
end sub
%>
Anstatt direkt auf die Tabelle zuzugreifen, kann man auch eine View
basteln, die noch mehr Informationen zur�ckgibt:
SELECT *, (SELECT COUNT(*)
FROM project AS B
WHERE b.parent_project_id = a.project_id) AS children
FROM project AS A
WHERE parent_project_id = [P1]
ORDER BY project_id
Hier wird zus�tzlich die Anzahl der "Kinder" ausgegeben, so dass man
sich manchen DB-Aufruf dann sparen kann.
Wenn die Anzahl der Ebenen begrenzt ist, kann man auch direkt ein
hierarchisches Recordset erzeugen lassen.
Ich vermisse bei Dir eine Spalte, in der die Reihenfolge innerhalb einer
Ebene festgelegt wird. Sortierst Du einfach nur nach "project_id" oder
vielleicht gar nicht?
Freundliche Gr��e
Joachim van de Bruck
| [aspdedatabase] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp