1. sayfa
Şu şekilde pratik olarak sorunumu çözdüm arkadaslar sonradan görüpte ihtiyacı olanlar için WITH CTE (CategoryID) AS ( select CategoryID from Category WHERE CategoryID=@CategoryIDParameter UNION ALL select C.CategoryID FROM Category AS C ,CTE WHERE C.ParentID=CTE.CategoryID ) select * from Article as A inner join CTE on CTE.CategoryID=A.CategoryID WHERE --Diger Kosullar |
merhaba, ben de asp.net c#'da benzer bir uygulama geliştirmekteyim. acaba parametre olarak verdiğim kategoriID'sine ait tüm alt kategorileri nasıl elde edebilirim, sizin örneğiniz sql ile yapılmış sql'de çok iyi değilim sadece basit sorgular yapabiliyorum procedyre yada programcıklar yazamıyorum. acaba sorunumu c#'da yazacağım bir fonksiyonla çözemezmiyim. yada daha basit bir sql cümleciği ile, iyi çalışmalar... |
Projende veritabanı kullanmıyo musun? |
Tamam işte önceden yazdıgım sql sorgusu ile yapabilirsin |
KK_Categories tablosu CategoryID, UpCategoryID, CategoryName ve Descreption alanlarından oluşmakta amacım ise örneğin UpCategoriID'is 2 olan kategorinin altındaki tüm altkategorileri elde etmek. articles, producs yada başka bir tablo ile ilişkilendirme yok şu an için tek tabloda herşey. CategoryID---UpCategoryID--CategoryName 1---------------0-----------------Binalar 2---------------0-----------------Depolar 3---------------0-----------------Laboratuvar 4---------------1-----------------İdari Bina 5---------------1-----------------Alım Binası 6---------------4-----------------İç Mekan 7---------------4-----------------Dış Mekan 8---------------6-----------------Odalar kategori tablom yukardaki gibi ben binaların categoryId'sini parametre olarak gönderdiğim zaman onun altın yer alan tüm alt kategorilere ulaşmak istiyorum sonuç olarak (Binalar, İdari Bina, Alım Binası, İç MEkan, Dış Mekan, Odalar) elde etmeliyim. Cevapların için çok teşekkür ederim. |
Tamam yukardaki koddai ParentID olan yer ebeveyn yani bir üst IDli kategori yani sendeki UpCategoryID tek tablo kullanıyosan ona göre düzenlemen lazım kodu yukardaki kordda kategori ve onları kullandıgım makaleler tablosu var |
Sorunun kaynağını buldum, kullandığım sql sürümü biraz eski projede MS SQL 2000 kurulu ve recursive tablo sorguları için WITH fonksiyonunu desteklemiyor. Bende data üzerinde satır satır gezerek hardcode yazarak sonuca ulaştım, kulağı tersten göstermek gibi oldu sonuca ulaştım ama performans kaybı yinede rahatsız edici, yardımların için teşekkür ederim. private string _catIdler; //Belirtilen kategoriye ait tüm alt kategorilerin idlerini getirir... public string GetAllCategoryById(TreeNode tumAltKategoriler, KK_Categories tumKategoriler, int categoryId) { _catIdler = categoryId.ToString(); _catIdler += ","; foreach (KK_Category kkCategory in tumKategoriler) { if (kkCategory.UpCategoryID == categoryId) { var parentCategory = new TreeNode {Text = kkCategory.CategoryName, Value = kkCategory.ID.ToString()}; var upCategoryId= kkCategory.ID; tumAltKategoriler.ChildNodes.Add(parentCategory); _catIdler += kkCategory.ID; _catIdler += ","; FillCategory(parentCategory, upCategoryId); } } return _catIdler.Remove(_catIdler.Length - 1, 1); } public int FillCategory(TreeNode parent, int upCategoryId) { var altKategoriler = new KK_Categories(); altKategoriler.Load(upCategoryId); if (altKategoriler.Count > 0) { foreach (KK_Category kkCategory in altKategoriler) { var childCategory = new TreeNode {Text = kkCategory.CategoryName, Value = kkCategory.ID.ToString()}; //sql sorgusunda kullanılmak üzere global değişkene idler ekleniyor... _catIdler += childCategory.Value; _catIdler += ","; var tempCategory = kkCategory.ID; parent.ChildNodes.Add(childCategory); FillCategory(childCategory, tempCategory); } return 0; } return 0; } |
Free versiyonu kurup çalıştırabilirsiniz. < Resime gitmek için tıklayın > |
aynı sonucu elde ettim sql performansı çok daha yüksek. çok teşekkür ederim yardımlarınız için... WITH Kategoriler AS (SELECT KategoriID, KategoriAdi, UpKategoriID FROM KKKKategori WHERE (UpKategoriID = 1) UNION ALL SELECT c.KategoriID, c.KategoriAdi, c.UpKategoriID FROM KKKKategori AS c INNER JOIN Kategoriler AS m ON c.UpKategoriID = m.KategoriID) SELECT KategoriID, KategoriAdi, UpKategoriID FROM Kategoriler AS Kategoriler_1 |
1. sayfa
Category Tablosu
CategoryID-ParentCategoryID-Name......
Article Tablosu
ArticleID-CategoryID-Title-Content......
Category tablosundaki yapıda sınırsız agac yapısı olusuyo yani her bi kategoriye bi alt kategori açılabiliyor.Eğer ParentCategoryID null ise o ana kategori olmakta
Şimdi benim yapmak istedigim şu internette baya bi örnek var gibi am aistedigimi tam olarak bulamadım.Örnegin parametre olarak herhangi bir kategory geldigi zaman o kategorinin altındaki tüm kategorilerdeki articleları article tablosundan listelemek.Bunu tam olarak nasıl yapabilirim.İşe yarar bi kaynak gösterebilir misiniz?
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi korn18 -- 16 Temmuz 2014; 20:21:15 >