T-SQL, Wie man alle Elemente eines Baumes in T-SQL?
Ich habe ein problem mit einem t-sql-Abfrage.
Sagen wir, ich habe ein Kategorien-Baum (Kategorien ID)
cat_table
1
|
2-\
| 3-\
6 | 5
| 4 |
... ...
ads_table
ad_ID
category_ID
natürlich die category_ID
Spalte Verweise auf die ID
Spalte in der cat_table
das problem ist, wie man (rekursiv ?) alle anzeigen von alle Kategorien, die oben-die meisten Eltern ist die 1. Kategorie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie vertraut mit Common Table Expressions in SQL Server? Eine der vielen einen CTE hat, ist zu tun, rekursive Abfragen.
Folgende ist einer der besten Artikel, die ich gefunden habe zum Thema:
http://www.4guysfromrolla.com/webtech/071906-1.shtml
versuchen Sie, eine rekursive Common Table Expressions, aka "CTE" (verfügbar in SQL Server 2005 und höher) wie diese:
Ausgabe:
ändern @Root_id um andere Ausgabe:
Gibt es eine option, um zu vermeiden, recurrency in Baum-browsing-Abfragen. Sie können hinzufügen 'Pfad' - Spalte, um Ihre Kategorien-Baum. Es sollte enthalten jedes element Vorfahren IDs getrennt mit einigen nicht-numerisches Zeichen (wie slash).
Beispielsweise Ihre "ID=4" Kategorie-Pfad würde dann so Aussehen: "/1/2/3/"
Wenn Sie jetzt beitreten, werden Ihre anzeigen Tabelle zu Kategorien, die Sie tun müssen, folgende:
Und das ist Ihre Abfrage.
Lesen Sie mehr zu diesem Thema auf meiner blog-post