• 18-02-2021, 02:59:40
    #1
    Merhabalar, cümleten iyi geceler.

    Bir projem için içerikleri beğeni sayılarına göre çekmek istiyorum. SQL tarafında çuvallıyorum.

    İşlem yapacağım 2 tablo şu şekildedir.

    tb_likes = like_id, post_id, user_id
    tb_post = post_id, post, user_id, status

    Aksiyon
    beğen butonuna basılınca oturumdaki kullanıcının user_id ve ilgili post_id "tb_likes" tablosuna işleniyor.

    tb_post tablosundaki verileri tb_likes tablosundaki beğeni sayılarına göre en çok beğeni alandan en az beğeni alana göre sıralamak istiyorum. Nasıl yapabilirim, yardımcı olabilir misiniz?

    Şimdiden teşekkür ederim.
  • 18-02-2021, 03:09:34
    #2
    Canlı denemeden kesin bir şey yazamam ama,

    'SELECT COUNT(post_id) AS toplam FROM tb_likes GROUP BY post_id ORDER BY toplam DESC';
    şeklinde deneyebilirsiniz.
  • 18-02-2021, 03:13:15
    #3
    Zalmoxis adlı üyeden alıntı: mesajı görüntüle
    Canlı denemeden kesin bir şey yazamam ama,

    'SELECT COUNT(post_id) AS toplam FROM tb_likes GROUP BY post_id ORDER BY toplam DESC';
    şeklinde deneyebilirsiniz.
    Çok teşekkür hocam eve geçtiğim zaman deneyeceğim, sorgudaki toplam nereden geliyor, sorabilir miyim?
  • 18-02-2021, 03:15:46
    #4
    AKSOYOGLU adlı üyeden alıntı: mesajı görüntüle
    Çok teşekkür hocam eve geçtiğim zaman deneyeceğim, sorgudaki toplam nereden geliyor, sorabilir miyim?
    Hocam toplam değeri post_id lerinin kaç kere geçtiğini sayarak geliyor. Ancak bu şekilde çalışır mı bilmiyorum. Sizin yerinizde olsam beğeni sayısını da tb_posts tablosunda tutardım. tb_likes tablosunu sadece aynı üye 2 kere oy veremesin diye kullanırdım. Yine de siz bilirsiniz tabii ki.
  • 18-02-2021, 03:29:05
    #5
    Zalmoxis adlı üyeden alıntı: mesajı görüntüle
    Hocam toplam değeri post_id lerinin kaç kere geçtiğini sayarak geliyor. Ancak bu şekilde çalışır mı bilmiyorum. Sizin yerinizde olsam beğeni sayısını da tb_posts tablosunda tutardım. tb_likes tablosunu sadece aynı üye 2 kere oy veremesin diye kullanırdım. Yine de siz bilirsiniz tabii ki.
    Anlıyorum, tekrardan teşekkür ederim.
  • 18-02-2021, 03:32:39
    #6
    count ve join yardımıyla yapabilirsin. Fakat tavsiye olarak beğeni sayısını tb_post tablonda kayıt et öyle işlem yap
  • 18-02-2021, 04:45:51
    #7
    SELECT tb_post.*, COUNT(tb_likes.like_id) AS like_count
    FROM tb_post LEFT JOIN tb_likes ON tb_post.post_id = tb_likes.post_id
    GROUP BY tb_post.post_id
    ORDER BY like_count DESC

    Bu şekilde hallolması lazım.
    Edit: tb_likes tablosundaki post_id sütununa index verirseniz işlemler çok daha hızlı olur sürekli bir ilişki kurulacağı için.
  • 18-02-2021, 19:36:18
    #8
    onurkun adlı üyeden alıntı: mesajı görüntüle
    SELECT tb_post.*, COUNT(tb_likes.like_id) AS like_count
    FROM tb_post LEFT JOIN tb_likes ON tb_post.post_id = tb_likes.post_id
    GROUP BY tb_post.post_id
    ORDER BY like_count DESC

    Bu şekilde hallolması lazım.
    Edit: tb_likes tablosundaki post_id sütununa index verirseniz işlemler çok daha hızlı olur sürekli bir ilişki kurulacağı için.
    Hocam çok büyüksün, zahmetin için teşekkür ederim.