• 19-07-2017, 14:34:35
    #1
    Merhaba arkadaşlar mysqlde iki tablo arasında ilişki kurmakta mantık sorunu yaşıyorum.

    CATEGORY:
    category_id, title

    PRODUCT:
    product_id, name

    Product ve kategorileri bir ürünün birçok kategori altına eklenebileceği şekilde ilişkilendirmem gerekiyor ama öyle bi ilişkilendirme yapmalıyım ki şöyle bi sorgu yapabileyim.

    (kategori id'si 5 veya 6 olan) ve (kategori id'si 4 olan) ve (kategori id'si 83 veya 84 olan) ürünleri göstermek istiyorum.

    SELECT * FROM XXX ( (cat_id=5 OR cat_id=6) AND (cat_id=4) AND (cat_id=83 OR cat_id=84))

    Bu sorguyu istediğim sonucu daha iyi anlatabilmek adına yazıverdim. tüm kategoriler tek id şeklinde cat_id sütununda olamayacaktır tabi ama istediğim sonuç budur.

    Mümkün müdür? Tablo yapısı nasıl olmalıdır?
  • 19-07-2017, 15:07:07
    #2
    codeksper adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar mysqlde iki tablo arasında ilişki kurmakta mantık sorunu yaşıyorum.

    CATEGORY:
    category_id, title

    PRODUCT:
    product_id, name

    Product ve kategorileri bir ürünün birçok kategori altına eklenebileceği şekilde ilişkilendirmem gerekiyor ama öyle bi ilişkilendirme yapmalıyım ki şöyle bi sorgu yapabileyim.

    (kategori id'si 5 veya 6 olan) ve (kategori id'si 4 olan) ve (kategori id'si 83 veya 84 olan) ürünleri göstermek istiyorum.

    SELECT * FROM XXX ( (cat_id=5 OR cat_id=6) AND (cat_id=4) AND (cat_id=83 OR cat_id=84))

    Bu sorguyu istediğim sonucu daha iyi anlatabilmek adına yazıverdim. tüm kategoriler tek id şeklinde cat_id sütununda olamayacaktır tabi ama istediğim sonuç budur.

    Mümkün müdür? Tablo yapısı nasıl olmalıdır?
    Doğru anladıysam aşağıdaki şekilde ilerlemeniz gerekiyor.

    CATEGORY:
    id, title

    PRODUCT:
    id, category_id, name

    Tabloları bu şekilde yapın. Product tablosunda ürünün hangi kategoriye ait olduğunu girebilirsiniz.

    İstediğiniz sorgu da şu şekilde olmalı :

    SELECT * FROM product as p
    inner join category as c on c.id = p.category_id
    where (c.id=5 OR c.id=6) AND (c.id=4) AND (c.id=83 OR c.id=84))
  • 19-07-2017, 15:10:55
    #3
    @ydlgr; Teşekkürler hocam ama bu şekilde product tablosunun category_id'sine sadece bir değer girebilirim. Bir ürünün çok kategori altına eklenmesi mümkün olmalı. Gerçi tüm kategori idlerini category_id'ye yazıp like sorgu ile sonuca ulaşabilirim ama mümkünse likelı sorgu kullanmak istemiyorum.
  • 19-07-2017, 15:18:51
    #4
    codeksper adlı üyeden alıntı: mesajı görüntüle
    @ydlgr; Teşekkürler hocam ama bu şekilde product tablosunun category_id'sine sadece bir değer girebilirim. Bir ürünün çok kategori altına eklenmesi mümkün olmalı. Gerçi tüm kategori idlerini category_id'ye yazıp like sorgu ile sonuca ulaşabilirim ama mümkünse likelı sorgu kullanmak istemiyorum.

    eğer bir ürünün bir den fazla kategorisi olacaksa bunu 3. bir ara tablo ile yapman gerekli.

    productcategory şeklinde bir tablo daha oluştur. Alanlar ise

    id, productid,categoryid şeklinde olmalı

    1 1 1
    2 1 2
    3 1 3



    productid 1 olan ürünün 1,2 ve 3 kategorilerine bağladık


    daha sonra join ile bunları birleştirebilirsin.
  • 19-07-2017, 15:23:20
    #5
    codeksper adlı üyeden alıntı: mesajı görüntüle
    @ydlgr; Teşekkürler hocam ama bu şekilde product tablosunun category_id'sine sadece bir değer girebilirim. Bir ürünün çok kategori altına eklenmesi mümkün olmalı. Gerçi tüm kategori idlerini category_id'ye yazıp like sorgu ile sonuca ulaşabilirim ama mümkünse likelı sorgu kullanmak istemiyorum.
    İstediğiniz ürünleri birden çok kategoriye ekleyebilirsiniz.

    Örnek üzerinden gidecek olursak ;

    Category
    id , name
    1 telefon
    2 mobil
    3 uygunFiyat

    Şimdi product tablosunda;

    Product
    id , category_id , name
    1 , 1 , samsung
    2 , 1 , apple
    3 , 2 , samsung
    4, 3 , samsung

    Bu şekilde mesela samsung hem 1 hem 2 hem de 3 id'li kategoriye dahil olur. Select sorgusunda da istediğiniz şekilde çekebilirsiniz verilerinizi.
  • 19-07-2017, 15:23:48
    #6
    @enc0der; hocam standart kesişim tablosu zaten budur tamam. bu tabloda 2 idli kategoriye eklenmiş ürünleri kolayca listeletebilirim ama (kategori id'si 5 veya 6 olan) ve (kategori id'si 4 olan) ve (kategori id'si 83 veya 84 olan) ürünlerin ilk 20 tanesini listelemek için bi sorgu yazılabilir mi?

    @ydlgr; enc0der'e yazdığım sizin cevap için de aynen geçerlidir.

    İkinize de ilginiz için teşekkürler.

    Yardım beklenmeye devam ediliyor.
  • 19-07-2017, 15:34:16
    #7
    codeksper adlı üyeden alıntı: mesajı görüntüle
    @enc0der; hocam standart kesişim tablosu zaten budur tamam. bu tabloda 2 idli kategoriye eklenmiş ürünleri kolayca listeletebilirim ama (kategori id'si 5 veya 6 olan) ve (kategori id'si 4 olan) ve (kategori id'si 83 veya 84 olan) ürünlerin ilk 20 tanesini listelemek için bi sorgu yazılabilir mi?

    @ydlgr; enc0der'e yazdığım sizin cevap için de aynen geçerlidir.

    İkinize de ilginiz için teşekkürler.

    Yardım beklenmeye devam ediliyor.
    Aşağıdaki sorgu işinizi görecektir.

    SELECT * FROM product as p
    inner join category as c on c.id = p.category_id
    where (c.id=5 OR c.id=6) AND c.id=4 AND (c.id=83 OR c.id=83)
    order by p.id limit 20;
  • 19-07-2017, 15:38:19
    #8
    ydlgr adlı üyeden alıntı: mesajı görüntüle
    Product
    id , category_id , name
    1 , 1 , samsung
    2 , 1 , apple
    3 , 2 , samsung
    4, 3 , samsung
    ydlgr adlı üyeden alıntı: mesajı görüntüle
    Aşağıdaki sorgu işinizi görecektir.
    SELECT * FROM product as p
    inner join category as c on c.id = p.category_id
    where (c.id=5 OR c.id=6) AND c.id=4 AND (c.id=83 OR c.id=83)
    order by p.id limit 20;
    Bu sorgu daha önce yazdığınız tabloda işimi görmez hocam. Bir ürün birçok kategoriye bağlandığında 'AND'li sorguların tamamında 0 sonuç döndürür. 'OR'lu sorgularda ise aynı üründen birçok defa döndürür.

    Yardım lütfen.

    .
  • 19-07-2017, 18:35:28
    #9
    Pek anlamam ama.. category_id'sini c.id IN(4,5,6,83,84) yapmak ile (c.id=5 OR c.id=6) AND c.id=4 AND (c.id=83 OR c.id=83) arasındaki fark nedir?