+ Yanıtla
Toplam 5 sonuçtan 1 ile 5 arası olanlar

Konu Başlığı: Gruplayarak sıralama

  1. #1

    Gruplayarak sıralama

    Merhaba arkadaşlar,
    Bir sitede aynı makalenin farklı kategorilerde gözükmesini sağlayan bir tablo yapım var. Hal böyle olunca hangi yazının hangi kategorilerde gözükeceğini belirleyen tabloda aynı yazı birkaç kez gözüküyor. Ben bu işi sürekli sorguyla yapmak yerine bir view ile ikisini birleştirdim ve sayfada okumayı da buradan yapıyorum.
    Buraya kadar izah ettikten sonra yapmak stediğime geleyim.
    Sitede çok okunanlar diye bir bölüm var ve burada ben hit.e göre desc yapıyorum. Fakat normal olarak hit.e göre (top 5) deyince genellikle tekrarlı olarak geliyor bu 5 adet veri. Çünkü 1 numaralı yazı hem a hem de b kategorisinde var ve view.de çift çift gösterince sayfaya da datalar çift giriyor. Doğrudan makalelerin bulunduğu tablodan çekmek de problemimi çözmüyor çünkü site farklı dillerde çalışıyor ve dil tanımları da kategoriler tablosundan yapılıyor yani bir makalenin değil kategorinin dili var. Ve örneğin Türkçeye girince sadece Türkçe'ye ait olan makaleleri çekmesi gerekiyor. Buraya kadar kafa karıştırdıktan sonra çoğu kez iç içe SQL yazıp da içinden çıkamayınca önce view'den group by ile ArticleId ye göre gruplayıp sonra bunlaırın arasından Hit desc yapmak aklıma geldi ama basaramadım, uzun süredir çalışmaktan mıdır nedir aklıma da getiremedim.


    VIEW_MAKALELER

    YAPI
    MakaleId
    Baslik
    Hit

    İÇERİK
    MklId - Kategori - Baslik - Hit
    1 - Kat1 - Baslik1 - 5
    1 - Kat3 - Baslik1 - 5
    1 - Kat2 - Baslik1 - 5
    2 - Kat1 - Baslik2 - 12
    2 - Kat4 - Baslik2 - 12
    2 - Kat2 - Baslik2 - 12
    3 - Kat1 - Baslik3 - 7
    3 - Kat2 - Baslik3 - 7

    Burada önce MklId ye göre gruplayıp sonra bunların arasından Hit'e göre desc etmeli ki aynı makale birkaç kez gözükmesin sayfada.


    Şimdiden herkese teşekkürler
    Till you don't leave the cave, it's normal to be a slave!

    www.harunsarac.com

  2. #2

    Re: Gruplayarak sıralama

    merhaba,
    tekrarlamaya neden olan öğe KATEGORI sütunu olarak gorunuyor. SQL ifade verilseydi daha aciklayici olurdu ancak tahiminimce SELECT ile FROM arasındaki sütun adları dizisi, Kategori'yi de içererek makale gruplamasınının yapılmasını engelliyor.
    sevgiSaygi = true;

  3. #3

    Re: Gruplayarak sıralama

    Zaten SQL.i yazamadığım için sormak zorunda kaldım.
    mantık dedğim gibi groupby ile oluşturulan bir recordsetin başka bir rs.de yeniden yorumlanabilmesi. diğer bir deyişle iç içe SQL aslında yapmak istediğim şey...

    Re-edit:
    Arkadaşlar aşağıdaki gibi bir SQL yazdım ancak yine tekrarlı getiriyor çünkü sebebini de uzun süre düşündükten sonra anladım zaten. sonuçta hata yok SQL.de, gidip distinct bir şekilde seçilen id.lerin arasından seçiyor ama çifterli gelmesini engellemiyor, sonuçta seçili id.lerin dışına çıkmıyor. tekrar konusunu yine çözemedim kısacası....

    Kod:
    Select * from vwArticles where ArticleId in(select distinct ArticleId from vwArticles) order by Hit desc, PublishingDate desc
    Mesaj darkfaceofmoon tarafından 21.12.2008 (13:49) yeniden düzenlendi.
    Till you don't leave the cave, it's normal to be a slave!

    www.harunsarac.com

  4. #4

    Re: Gruplayarak sıralama

    tablo yapısını ve istediğinizi tam yazarsanaız daha fazla yrım alabilirsiniz. mesela, verdiğiniz yapı ve içerik farklı, dilden bahsetmişsiniz, onunla ilgili bir veri yok.

    subselect kullanarak yapabilirsiniz sanırım. [select a, b, (select top 1 e from t1 where t1.c = t2.d) x from t2] gibi
    "oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney
    http://www.sipidik.com

  5. #5

    Re: Gruplayarak sıralama

    aslında verecektim biraz daha bilgi de soruyu sorarken bir taraftan uğraşıyordum. subselect problemi mi çözdü.
    okuyacak arkadaşlara da yardımcı olması açısından detaylı açıklayayım.
    Şimdi sistemde bir kategori, bir makale, bir de hangi makalenin hangi kategorilerde gözükeceğini gösteren bir tablomuz.
    - KATEGORİ -
    KAT_ID
    KAT_ADI
    KAT_DILI

    - MAKALE -
    MAKALEID
    MAKALEBASLİK
    HİT
    TARİH

    - KAT_MAKALE
    TRACKID
    MAKALEID
    KAT_ID

    Kat_Makale tablosunda verilerin nasıl geldiğini soru sorarken aktarmıştım.

    Bir view ile Kat_Makale tablosu üzerinde diğer tabloları birleştirdim böylece başlık vs rahatlıkla okuyorum.Hem de hangi makalenin hangi dile bağlı olduğunu görüyorum zira dil olayı kategroiden belirleniyor. Yani makaleye bakarak hangi dilde olduğunu göremiyorsunuz, önce makalenin gözüktüğü kategoriye, oradan da kategorinin tanımlandığı dile bakmak gerekiyor.

    Sorunumuzun temeli şu ki ben LangId="tr" ye göre Hit desc dediğimide aşağıdaki gibi bir sonuç gelebiliyor çünkü aynı makale farklı kategorilerde de var.
    ArticleId KatId Baslik Hit
    1 - a - baslik1 - 14
    1 - b - baslik1 - 14
    2 - a - baslik2 - 12
    2 - b - baslik2 - 12
    3 - a - baslik3 - 11
    3 - b - baslik3 - 11
    3 - c - baslik3 - 11

    Hal böyle olunca bir de bunları tekillemek gerekiyordu. Yani önce articleId ye göre gruplamak, sonra bunların içinden seçmek gerekiyordu hit desc olarak. çünkü ben top 4 ve hit desc dediğimde 1,1,2,2 geliyor...
    aşağıdaki SQL kodu bu sorunumu çözdü. ilgilenen arkadaşlara teşekkürler

    Kod:
    Select top 4 ArticleId,Title,Hit from Articles where ArticleId in(Select ArticleId from vwCatsArticles where LangId='tr')  order by Hit desc
    Yani önce tekrarlıyor dediğim view.den langId="tr " olanların tümünü çekiyor, sonra bunların arasından top4 ü alıyor ama tekrarsız olan articles tablosu ile yapıyor.




    Alıntı absconder tarafından gönderilen mesaj: Mesajı Göster
    tablo yapısını ve istediğinizi tam yazarsanaız daha fazla yrım alabilirsiniz. mesela, verdiğiniz yapı ve içerik farklı, dilden bahsetmişsiniz, onunla ilgili bir veri yok.

    subselect kullanarak yapabilirsiniz sanırım. [select a, b, (select top 1 e from t1 where t1.c = t2.d) x from t2] gibi
    Till you don't leave the cave, it's normal to be a slave!

    www.harunsarac.com

+ Yanıtla

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz