• 19-05-2020, 18:55:41
    #1
    Merhaba arkadaşlar;

    Projeyi yazarken bir noktada takıldım ve yardımlarınıza ihtiyacım var. Yardımcı olanlara şimdiden çok teşekkür ederim.

    Mevzu şu şekildedir;

    A tablom var ve burada x sütunumun 4,5,6 şeklinde tutuluyor.
    B tablom var burda y sütunumun değeri A tablosundaki x sütununun tek hali yani 5 veya 6.

    Yapmam gereken işlem şu şekilde;
    A tablosundaki verileri, A tablosunun x sütununda bulunan değerler B tablosunda y sütununda ki değerlerle eşleşiyorsa veri listele eşleşmiyorsa listeleme.

    Yani bir örnekle açıklamak gerekirse;
    A TABLOM
    ID - X DEĞERİ
    1 - 3,4,5
    2 - 4,5,6

    B TABLOM
    ID - A KAYDI - Y DEĞERİ
    1 - 1 - 3
    2 - 1 - 4
    3 - 1 - 5
    4 - 2 - 4
    5 - 2 - 5

    Yukarda görüldüğü gibi A tablomda 1 ID sinde 3 değer var ve B tablomda da bu 3 değer var ve değer numaraları eşleşiyor veriyi getirmesi gerek. Ancak 2 ID sinde 3 değer var fakat B tablomda 2 kayıt var eşleşiyor fakat 6 nolu değer olmadığı için veriyi getirmemesi gerekli.

    SELECT DISTINCT a.id,
    (SELECT COUNT(*) FROM b_tablosu
    WHERE a_kaydi= a.id AND durum = '1') AS degerlendirme_sayisi,
    (CHAR_LENGTH(x_degeri) - CHAR_LENGTH(REPLACE(x_degeri, ',', '')) + 1) as degerlendirici_sayisi
    FROM a_tablosu AS a LEFT JOIN b_tablosu AS b ON b.a_kaydi= a.id HAVING degerlendirme_sayisi = degerlendirici_sayisi
    Yukarıdaki kodda sadece verilerin sayısına göre listeletebiliyorum lakin 1 değeri için b tablosunda 3, 4, 6 olsa bile verileri listeleyecek.

    Normalde php ile birkaç kademede çözebilirim lakin yapmak istediğim şey sadece tek bir mysql sorgusuyla bu işlemi halletmek. Bahsettiğim konu tek mysql sorgusuyla halledilebilir mi?
  • 19-05-2020, 22:54:23
    #2
    group_concat
  • 19-05-2020, 23:26:30
    #3
    @ByAkman; Yaptığın mantığı tam tersi uygula mesela B tablosundan 3 değerini al A tablosunda ki kolon içerisinde SQL IN komutunu araştır nasıl kullandığına bak ve kendine uygula göreceksin işe yaradığını sana yardımcı olması için örnek bir kod bırakıyorum aşağıya : )
    Select ISIM, YAS FROM UYE WHERE ISIM IN(‘Ali’,’Ahmet’)
    Bu demek oluyor ki bir kolon içerisinde IN('deger1', 'deger2') parantez her iki tırnak içerisinde yazılanlardan en az bir tanesi var ise veriyi getir : ) tam olarak aslında sana yarayan bir SQL komutu.
  • 20-05-2020, 00:21:23
    #4
    ​​​​
    suleymanyaldiz adlı üyeden alıntı: mesajı görüntüle
    group_concat
    DPA adlı üyeden alıntı: mesajı görüntüle
    @ByAkman; Yaptığın mantığı tam tersi uygula mesela B tablosundan 3 değerini al A tablosunda ki kolon içerisinde SQL IN komutunu araştır nasıl kullandığına bak ve kendine uygula göreceksin işe yaradığını sana yardımcı olması için örnek bir kod bırakıyorum aşağıya : )
    Select ISIM, YAS FROM UYE WHERE ISIM IN(‘Ali’,’Ahmet’)
    Bu demek oluyor ki bir kolon içerisinde IN('deger1', 'deger2') parantez her iki tırnak içerisinde yazılanlardan en az bir tanesi var ise veriyi getir : ) tam olarak aslında sana yarayan bir SQL komutu.
    Cevaplarınız için teşekkürler oruç kafaya vurmuş herhalde iftar sonrası yaptığım hatayı anladım ve FIND_IN_SET ile çözdüm.
  • 20-05-2020, 03:35:50
    #5
    ByAkman adlı üyeden alıntı: mesajı görüntüle



    Cevaplarınız için teşekkürler oruç kafaya vurmuş herhalde iftar sonrası yaptığım hatayı anladım ve FIND_IN_SET ile çözdüm.
    evet ben de benzer birşey hazırlamıştım find in set ile kullanşlı kolay çözüm