none
sql en çok yorum alan RRS feed

  • Soru

  • Merhaba arkadaşlar sorunum şu:

    veri tabanında 3 adet tablom mevcut  (news, comment ve categories)

    yazmak istediğim sorgu şu :

    kendi kategorisinden en çok yorum alan haberleri getir.

    benim yazdığım sorgu ise şu şekilde:

    SELECT top 4 haber_ID, COUNT( haber_ID ) as kayitsayisi FROM comment C inner join news N on N.ID=C.haber_ID inner join categories Cat on N.hbr_kategori=Cat.kategori_ID where Cat.kategori_adi='sektörel' GROUP BY haber_ID  order by kayitsayisi desc

    sorgu sonucunda 'sektörel' kategorisinde en çok yorum alan ilk 4 haberi görebiliyorum ama bu haberlerin yalnızca haber_ID'lerine erişebiliyorum. Ama ben diğer bilgilere de erişmek istiyorum. 'news' tablosundaki 'hbr_baslik' gibi

    sorguyu ;

    SELECT top 4 haber_ID, N.hbr_baslik FROM comment C inner join news N on N.ID=C.haber_ID inner join categories Cat on N.hbr_kategori=Cat.kategori_ID where Cat.kategori_adi='sektörel' GROUP BY haber_ID  order by COUNT( haber_ID )desc

    şeklinde değiştirdiğimde ise şu hatayı alıyorum;

    Column 'news.hbr_baslik' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

    umarım sorunumu anlatabilmişimdir.

    Teşekkür ederim .

    20 Ağustos 2014 Çarşamba 13:58

Yanıtlar

  • Goruntu yerine data versen daha iyiydi ya neyse :)

    SELECT tmp.sayi, news.*
    FROM news 
    INNER join 
    (SELECT TOP 4
            haber_ID, COUNT(haber_ID) AS sayi
    FROM    comment C
            INNER JOIN news N ON N.ID = C.haber_ID
            INNER JOIN categories Cat ON N.hbr_kategori = Cat.kategori_ID
    WHERE   Cat.kategori_adi = 'sektörel'
    GROUP BY haber_ID
    ORDER BY COUNT(haber_ID) DESC) tmp ON [tmp].haber_id = news.ID
    ORDER BY tmp.sayi DESC

    • Yanıt Olarak İşaretleyen furkan.kaya 20 Ağustos 2014 Çarşamba 16:54
    20 Ağustos 2014 Çarşamba 16:26

Tüm Yanıtlar

  • SELECT *
    FROM news 
    WHERE news.ID in
    (SELECT TOP 4 haber_ID FROM comment C INNER JOIN news N ON N.ID = C.haber_ID INNER JOIN categories Cat ON N.hbr_kategori = Cat.kategori_ID WHERE Cat.kategori_adi = 'sektörel' GROUP BY haber_ID ORDER BY COUNT(haber_ID) DESC)


    • Düzenleyen CetinBasoz 20 Ağustos 2014 Çarşamba 14:15
    • Yanıt Olarak İşaretleyen furkan.kaya 20 Ağustos 2014 Çarşamba 14:21
    • Yanıt İşaretini Geri Alan furkan.kaya 20 Ağustos 2014 Çarşamba 14:32
    • Yanıt Olarak İşaretleyen furkan.kaya 20 Ağustos 2014 Çarşamba 14:33
    • Yanıt İşaretini Geri Alan furkan.kaya 20 Ağustos 2014 Çarşamba 15:18
    20 Ağustos 2014 Çarşamba 14:14
  • bu sorguyu yazınca da en çok yorum alan ilk 4 haber geliyor ama gelen haberler sıralı değil.

    Yani gelen ilk 4 haber de yorumlanma sayılarına göre sıralı gelmeli.Ama  yorumlanma sayılarına göre sıralı gelmiyorlar

    20 Ağustos 2014 Çarşamba 14:36
  • yazılan sorguya göre dönen sıralı değerler bunlar .

    dönmesi gereken sıralı değerler ise bunlar

    20 Ağustos 2014 Çarşamba 14:44
  • Goruntu yerine data versen daha iyiydi ya neyse :)

    SELECT tmp.sayi, news.*
    FROM news 
    INNER join 
    (SELECT TOP 4
            haber_ID, COUNT(haber_ID) AS sayi
    FROM    comment C
            INNER JOIN news N ON N.ID = C.haber_ID
            INNER JOIN categories Cat ON N.hbr_kategori = Cat.kategori_ID
    WHERE   Cat.kategori_adi = 'sektörel'
    GROUP BY haber_ID
    ORDER BY COUNT(haber_ID) DESC) tmp ON [tmp].haber_id = news.ID
    ORDER BY tmp.sayi DESC

    • Yanıt Olarak İşaretleyen furkan.kaya 20 Ağustos 2014 Çarşamba 16:54
    20 Ağustos 2014 Çarşamba 16:26
  • Elinize sağlık .Çok teşekkür ederim :D
    20 Ağustos 2014 Çarşamba 16:54