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?
Sql tablo veya sorgulama sorunu
12
●1.002
- 19-07-2017, 15:07:07Doğru anladıysam aşağıdaki şekilde ilerlemeniz gerekiyor.codeksper adlı üyeden alıntı: mesajı görüntüle
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@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:51codeksper adlı üyeden alıntı: mesajı görüntüle
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İstediğiniz ürünleri birden çok kategoriye ekleyebilirsiniz.codeksper adlı üyeden alıntı: mesajı görüntüle
Ö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@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:16Aşağıdaki sorgu işinizi görecektir.codeksper adlı üyeden alıntı: mesajı görüntüle
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:19ydlgr adlı üyeden alıntı: mesajı görüntüleBu 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.ydlgr adlı üyeden alıntı: mesajı görüntüle
Yardım lütfen.
.