Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

sınırsız alt kategoride kategorilerin tümünü bulmak ?

Konu, 'Veritabanları' kısmında cikmazsokak tarafından paylaşıldı.

  1. cikmazsokak

    cikmazsokak Üye

    Kayıt:
    12 Eylül 2011
    Mesajlar:
    214
    Beğenilen Mesajlar:
    0
    Eki Görüntüle 11582

    bu şekilde bir veritabanım var. üst id si id ye eşit olanlar o id nin alt kategorisi. Buraya kadar herşey normal listeleme vs vs

    örneğin bilgisayar kategorisindeki tüm alt kategorilerin id lerini almak istiyorum bunu nasıl yaparım ?
     
  2. bselvan

    bselvan Daimi Üye

    Kayıt:
    15 Ocak 2012
    Mesajlar:
    739
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    veritabanı MSSQL mi?
     
  3. cikmazsokak

    cikmazsokak Üye

    Kayıt:
    12 Eylül 2011
    Mesajlar:
    214
    Beğenilen Mesajlar:
    0
  4. bselvan

    bselvan Daimi Üye

    Kayıt:
    15 Ocak 2012
    Mesajlar:
    739
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    Kod:
    WITH [B]gecici_kategoriler[/B] (id,ad,ust_id)
    AS
    (
         SELECT id,ad,ust_id FROM kategoriler WHERE ust_id=0 AND ad='Bilgisayar'
         UNION ALL
         SELECT A.id,A.ad,A.ust_id FROM kategoriler A,[B]gecici_kategoriler[/B] B WHERE A.ust_id=B.id
    )
    SELECT id from gecici_kategoriler
    
    CTE kullanılarak yapılabilir bu şekilde. İlk sorgu çapa sorgusu. İkinci sorguda ilk select cümlesinden gelen sonuçları kullanıyor.Bu şekilde devam ediyor. MSSQL'de rekürsif sorgu yapmanın yolu bu şekilde.
     
  5. cikmazsokak

    cikmazsokak Üye

    Kayıt:
    12 Eylül 2011
    Mesajlar:
    214
    Beğenilen Mesajlar:
    0
    sıkıntı var. başka kategorilerin alt kategorileride örneği bilgisayarda ayakkabı kategoriside geliyor.çalışan koda aşağıda

    WITH gecici_kategoriler
    AS
    (
    SELECT id,ad,ust_kat FROM kategori WHERE ust_kat=0 AND ad='Bilgisayar'
    UNION ALL
    SELECT A.id,A.ad,A.ust_kat FROM kategori A,kategori B WHERE A.ust_kat=B.id
    )
    SELECT id,ad from gecici_kategoriler
     
  6. bselvan

    bselvan Daimi Üye

    Kayıt:
    15 Ocak 2012
    Mesajlar:
    739
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    kategori B olmayacak, gecici_kategoriler B olacak. İlk cevapta kalın yaparak vurgulamıştım.
     
  7. cikmazsokak

    cikmazsokak Üye

    Kayıt:
    12 Eylül 2011
    Mesajlar:
    214
    Beğenilen Mesajlar:
    0
    hata veriyor o zamanda.

    tablo oluşmadan tablonun içinden kendisini çağırıyosun sen nasıl çalışıcakki öyle ?
     
  8. bselvan

    bselvan Daimi Üye

    Kayıt:
    15 Ocak 2012
    Mesajlar:
    739
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    İkinci select sorgusuna geldiğinde gecici_kategoriler cte tablosuna ilk sorgudaki değerler aktarılmış oluyor zaten. Hatayı yazmamışsın ama büyük ihtimalle noktalı virgülden. WITH'in kapatma parantezinden sonra noktalı virgül koyarak tekrar deneyebilir misin?
     
  9. cikmazsokak

    cikmazsokak Üye

    Kayıt:
    12 Eylül 2011
    Mesajlar:
    214
    Beğenilen Mesajlar:
    0
  10. bselvan

    bselvan Daimi Üye

    Kayıt:
    15 Ocak 2012
    Mesajlar:
    739
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    UNION yerine UNION ALL kullanmalısın. Çalışan bir örneğini burada yaptım.Buradan bakabilirsin.
     
  11. cikmazsokak

    cikmazsokak Üye

    Kayıt:
    12 Eylül 2011
    Mesajlar:
    214
    Beğenilen Mesajlar:
    0
    Tamamdır saolasın gecenin bir vakti uğraştırdım seni. teşekkür ederim :)
     
  12. bselvan

    bselvan Daimi Üye

    Kayıt:
    15 Ocak 2012
    Mesajlar:
    739
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    Rica ederim. Kolay gelsin.
     
  13. kandur

    kandur Üye

    Kayıt:
    18 Kasım 2004
    Mesajlar:
    79
    Beğenilen Mesajlar:
    0
    Konuyu hortlatıyorum sanırım ama aynı noktada bir ihtiyacım var, ama veritabanım Mysql 5.1.30
    Bu durumda nasıl yapabilirim?