folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder MSSQL Sınırsız Kategori Sorgusu



MSSQL Sınırsız Kategori Sorgusu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    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! 

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Homer
    Homer's avatar
    Kayıt Tarihi: 08/Temmuz/2007
    Erkek

    id=5 çağırdığında ne olmasını istiyorsun? anlamadım hocam

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    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.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cosmic
    Cosmic's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    ş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


    Bittik biz bittik
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    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

     

     

Toplam Hit: 3469 Toplam Mesaj: 5