v2.5.2
Giriş yap

Mysql 2 tablo ile 3'lü ilişkilendirme ?

acemi
358 defa görüntülendi

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Ü

f4kor4ll
608 gün önce

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.