MSSQL Sınırsız Kategori Sorgusu
-
Kod tarafında döngü ile yapıyorum ancak bu performans sıkıntısı yaratmakta.
t-sql tarafında nasıl bir sorgu yazmak lazım ki en son kıvrımda olan kategori_id numarasını verince adım adım en tepesinde olan kategori adini versin bize?
id adi ust_id
1 bilgisayar 0
2 araba 0
3 BMW 2
4 3.1 3
5 3.1 yeniKasa 4
5 numaralı id'yi prosedure vereceğiz o da bize en üst kıvrıma kadar gidecek işte..
Pls Help Me!
-
id=5 çağırdığında ne olmasını istiyorsun? anlamadım hocam
-
cemnet bunu yazdı:
-----------------------------Kod tarafında döngü ile yapıyorum ancak bu performans sıkıntısı yaratmakta.
t-sql tarafında nasıl bir sorgu yazmak lazım ki en son kıvrımda olan kategori_id numarasını verince adım adım en tepesinde olan kategori adini versin bize?
id adi ust_id
1 bilgisayar 0
2 araba 0
3 BMW 2
4 3.1 3
5 3.1 yeniKasa 4
5 numaralı id'yi prosedure vereceğiz o da bize en üst kıvrıma kadar gidecek işte..
Pls Help Me!
-----------------------------Döngü yerine recursive method ile belki daha hızlı yapabilirsin ancak her halükarda ParetnID'ye göre ChildNode'ları select etmen gerekecek.
-
şuan ki haliyle tek sorguda istediğini yapabilmen mümkün değil gibi. derinlik diye bi alanın daha olsaydı onun sayısı kadar tabloyu join edip çıkartabilirdin istediğin sonucu
-
Alttaki t-sql ile sorun çözüldü
Çözüm: Common Table Expressions (CTE), Recursive
WITH Kat
(KategoriID, KategoriAdi, UstKatID, HierarchyLevel) AS
(
-- Base Method
SELECT
KategoriID,
KategoriAdi,
UstKatID,
1 as HierarchyLevel
FROM Kategori
WHERE KategoriID=31
UNION ALL
SELECT
k.KategoriID,
k.KategoriAdi,
k.UstKatID,
k2.HierarchyLevel + 1 AS HierarchyLevel
FROM Kategori k
INNER JOIN Kat k2 ON
k2.UstKatID = k.KategoriID
)
SELECT *
FROM Kat
ORDER BY HierarchyLevel desc
