Mysql 2 tablo ile 3'lü ilişkilendirme ?
2 adet tablom var fakat ilişkilendirmeyi 3 lü yapmak durumundayım.
farazi olarak söyle söylim
urun tablosu ve urun_ozellik tablosu
urun -->
id adi ozellikID
1 deneme 1
2 örnek 1
3 test 0
urun_ozellik -->
id altID baslik ozellik_baslik ozellik durum
1 0 test null 1
2 1 null php 1
3 1 null asp 1
4 1 null js 0
şimdi anlatabilecekmiyim ondan bile emin değilim. :)
filtreleme yaparken
ozellik_baslikları listeliyorum
asp ( ait toplam urun sayisi)
php ( ait toplam urun sayisi)
js ( ait toplam urun sayisi)
normalde yukardaki tabloya göre
asp ( 2 )
php ( 2 )
js ( 0 )
0 = pasif
1 = aktif
olmasını hedefliyorumda duruma a geçmeden önceki öteki tarafı yapim dedim olmadı
SELECT p1.baslik, p2.ozellik_adi, u.adi,
(SELECT COUNT(DISTINCT(ozellik_adi)) from urun_ozellikler)
FROM urun_ozellikler p1
INNER JOIN urun_ozellikler p2 ON p1.id = p2.altID
INNER JOIN urun u ON u.OzellikID = p2.altID;
SÖYLE BİŞİ YAPTIM AMA BU KAFAM DÜŞÜNMEKTEN YANDIĞI İÇİN :) İSTEDİĞİM SONUCU ELDE EDEMEDİM BİR TÜRLÜ
Anladığım kadarıyla, istediğiniz sonuç her özellik başlığı için, o özellik başlığına sahip olan kaç tane aktif ürün olduğunu gösteren bir liste. Bunu elde etmek için şöyle bir sorgu yazabilirsiniz:
SELECT p1.ozellik_baslik, COUNT(DISTINCT u.id) as urun_sayisi
FROM urun_ozellik p1
INNER JOIN urun_ozellik p2 ON p1.id = p2.altID
INNER JOIN urun u ON u.ozellikID = p2.id
WHERE p1.altID = 0 AND p2.durum = 1
GROUP BY p1.ozellik_baslik
Bu sorgu, önce urun_ozellik tablosunu iki kere JOIN ederek, her bir özellik başlığına sahip olan ürünleri listeleyecek. `p1.altID = 0
koşulu, sadece özellik başlıklarını seçmenizi sağlar (yani altID'si 0 olan özellikleri). p2.durum = 1
koşulu, sadece aktif özellikleri seçmenizi sağlar. Son olarak, GROUP BY
ifadesi, her bir özellik başlığı için ayrı ayrı sonuçlar elde etmenizi sağlar.
Bu sorguyu çalıştırdıktan sonra, her özellik başlığı için, o özellik başlığına sahip olan kaç tane aktif ürün olduğunu gösteren bir liste alabilirsiniz.