• 05-01-2020, 13:25:54
    #1
    Merhaba arkadaşlar, başlığa tam olarak ne yazacağımı bilemediğimden bu şekilde yazmak istedim.

    Şimdi şu şekilde mysql'e bağlanıp verileri çekiyorum.

    SELECT * FROM deals
    INNER JOIN users ON users.user_id = deals.deal_user_id
    ORDER BY deal_date DESC
    Ancak benim istediğim şey popüler fırsatları çekmek. deal_votes adında tablom var. Kullanıcı fırsata + verirse 1 yazdırıyorum - verirse 0 yazdırıyorum bunları saydırarak toplam sonucu fırsatlarda gösteriyorum.

    Ancak ben popüler fırsatlar alanını yaptığımda bunu göstermek istiyorum.

    deal_votes tablosu şu şekilde:


    Yani şöyle fırsatta +50 değeri gördüğü anda popüler fırsatlar alanında bu fırsatın çıkmasını istiyorum. Tam olarak mantık nasıl olmalı yardımcı olabilirseniz sevinirim.
  • 05-01-2020, 13:29:37
    #2
    Platin üye
    WHERE vote_value > 50 gibi bir kod mu arıyorsunuz anlayamadım tam
  • 05-01-2020, 13:33:15
    #3
    enesaydeniz adlı üyeden alıntı: mesajı görüntüle
    WHERE vote_value > 50 gibi bir kod mu arıyorsunuz anlayamadım tam
    2 farklı tablom var birisi deals diğeri deals_votes.
    Ben deals tablomdaki bir verinin (örnek id’si 1 olan) deals_votes’daki değerleri (örnek toplam 50 veri var diyelim) saydırıp bunu popüler olarak göstermek istiyorum.

    Ben karışık anlatıyor olabilirim kusura bakmayın, beynim biraz doldu
  • 05-01-2020, 13:38:54
    #4
    FSahin adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar, başlığa tam olarak ne yazacağımı bilemediğimden bu şekilde yazmak istedim.

    Şimdi şu şekilde mysql'e bağlanıp verileri çekiyorum.

    SELECT * FROM deals
    INNER JOIN users ON users.user_id = deals.deal_user_id
    ORDER BY deal_date DESC
    Ancak benim istediğim şey popüler fırsatları çekmek. deal_votes adında tablom var. Kullanıcı fırsata + verirse 1 yazdırıyorum - verirse 0 yazdırıyorum bunları saydırarak toplam sonucu fırsatlarda gösteriyorum.

    Ancak ben popüler fırsatlar alanını yaptığımda bunu göstermek istiyorum.

    deal_votes tablosu şu şekilde:


    Yani şöyle fırsatta +50 değeri gördüğü anda popüler fırsatlar alanında bu fırsatın çıkmasını istiyorum. Tam olarak mantık nasıl olmalı yardımcı olabilirseniz sevinirim.
    Sanırım aradığınız şu; group by ile vote deal id aynı olanları gruplandıracaksınız aynı zamanda count ile saydırıp toplamı 50 den yukarı olanları listeleteceksiniz.

    https://www.w3schools.com/sql/trysql...select_groupby

    Şurada bir örnek var
  • 05-01-2020, 13:40:25
    #5
    FSahin adlı üyeden alıntı: mesajı görüntüle
    2 farklı tablom var birisi deals diğeri deals_votes.
    Ben deals tablomdaki bir verinin (örnek id’si 1 olan) deals_votes’daki değerleri (örnek toplam 50 veri var diyelim) saydırıp bunu popüler olarak göstermek istiyorum.

    Ben karışık anlatıyor olabilirim kusura bakmayın, beynim biraz doldu
    Öncelikle tüm fursatları listeleyecek döngünü oluştur ardından bu döngü içerisinden fırsat id sini alıp oylama tablosundan kaç adet o fırsat id sine ait oylama var ise bunları saydır bu sayım sonucu belirlediğin değerden yukarı olanları listelemede gösterirsin. Bu yöntemde sayfalama yapack isen sorun çıkartır. Bu yöntem yerine oylama yapıldığında deals tablosunada ek bir sutun ekleyerek toplam oylamayı orada gösterirsen senin için sıralama daha kolay ve performanslı olur. deals_votes tablonda aynı kullacının tekrar oylama yapmaması için gereken kontrol verisini tutmuş olursun.
  • 05-01-2020, 13:50:38
    #6
    Üyeliği durduruldu
    deals tablosunun yapısını bilmediğim için deals.id olarak tanımladım tabloya göre değiştirirsiniz.


    SELECT *, count(deals_votes.vote_id) AS popular FROM deals
    LEFT JOIN deals ON deals.id = deals_votes.vote_deal_id WHERE deals_votes.vote_value > 0
    ORDER BY popular DESC
    edit // aşağıdaki gibi olacak

    SELECT *, count(deals_votes.vote_id) AS popular FROM deals
    LEFT JOIN deals ON deals.id = deals_votes.vote_deal_id WHERE deals_votes.vote_value > 0 GROUP BY deals_votes.vote_deal_id
    ORDER BY popular DESC
  • 05-01-2020, 14:27:11
    #7
    Ecancan adlı üyeden alıntı: mesajı görüntüle
    Öncelikle tüm fursatları listeleyecek döngünü oluştur ardından bu döngü içerisinden fırsat id sini alıp oylama tablosundan kaç adet o fırsat id sine ait oylama var ise bunları saydır bu sayım sonucu belirlediğin değerden yukarı olanları listelemede gösterirsin. Bu yöntemde sayfalama yapack isen sorun çıkartır. Bu yöntem yerine oylama yapıldığında deals tablosunada ek bir sutun ekleyerek toplam oylamayı orada gösterirsen senin için sıralama daha kolay ve performanslı olur. deals_votes tablonda aynı kullacının tekrar oylama yapmaması için gereken kontrol verisini tutmuş olursun.
    Döngüm hali hazırda mevcut bir şekilde vardı ve aynı kullanıcının oylama yapmaması için de ayarlamıştım. Senin söylediğin gibi deals tablona ek bir sütun ekleyip artı değeri geldiğinde deal_value'ye +1 eksi verildiğinde ise -1 şeklinde güncelleme yaptırdım. Sanırım şu anda mantıklı olarak bu şekilde görünüyor. Teşekkürler Ahmet

    MuhammetDemirel adlı üyeden alıntı: mesajı görüntüle
    Sanırım aradığınız şu; group by ile vote deal id aynı olanları gruplandıracaksınız aynı zamanda count ile saydırıp toplamı 50 den yukarı olanları listeleteceksiniz.

    https://www.w3schools.com/sql/trysql...select_groupby

    Şurada bir örnek var
    Socibox adlı üyeden alıntı: mesajı görüntüle
    deals tablosunun yapısını bilmediğim için deals.id olarak tanımladım tabloya göre değiştirirsiniz.
    SELECT *, count(deals_votes.vote_id) AS popular FROM deals
    LEFT JOIN deals ON deals.id = deals_votes.vote_deal_id WHERE deals_votes.vote_value > 0
    ORDER BY popular DESC
    edit // aşağıdaki gibi olacak

    SELECT *, count(deals_votes.vote_id) AS popular FROM deals
    LEFT JOIN deals ON deals.id = deals_votes.vote_deal_id WHERE deals_votes.vote_value > 0 GROUP BY deals_votes.vote_deal_id
    ORDER BY popular DESC
    Sizlere de teşekkürler, sorunumu çözdüm arkadaşlar.
  • 05-01-2020, 21:42:50
    #8
    sanırım mysql sum ile döngüye sokmadanda işinizi hall ede bilirsiniz