Üç farklı tablolar üzerinden SQL Sorgulama

2 Cevap php

i üç tablo var

CATS
id           name
------------------------------
1            category1
2            category2
3            category3
4            category4


PRODUCT
id           name
------------------------------
1            product1
2            product2



ZW-CAT-PRODUCT
id_cats      id_product
------------------------------
1            1
3            1
4            2

şimdi benim ürün ve onların kategorileri almak istiyorum

product1 => category1,category3
product2 => category4

is there a way to get this array (or object or something) with one mysql query? i tried a bit with JOINS, but it seems thats this is not exactly what i need, or?

Şu anda (i çok thats düşünüyorum) 3 querys kullanıyorum.

herhangi bir öneriniz?

edit

and on the other way, what if i want to get ALL products of a specific category? can this also be done in one query?

2 Cevap

Sen GROUP_CONCAT sonuçlarınıza ayrılmış bir listesini almak için kullanabilirsiniz.

SELECT p.*, 
       GROUP_CONCAT(c.name SEPARATOR ',') as cats
FROM PRODUCT p
LEFT JOIN ZW-CAT-PRODUCT l
  ON l.id_product=p.id
LEFT JOIN CATS c
  ON c.id=l.id_cats
GROUP BY p.id

Yani temelde, bu ilk bazıları tüm verileri almak için katılır gelmez. Sadece c.name, her product_id / kategori çifti için bir satır görecekti ile GROUP_CONCAT hattını değiştirmek olsaydı. GROUP BY ürün kimliği dayalı grup sonuçları bunu söyler, ve sonra GROUP_CONCAT(c.name..), bir grup meydana gelen tüm farklı c.name değerlerini alabilir (yani ona anlatıyor her ürün kimliği için, size ürün kimliği ile gruplama) ve ayırıcı olarak , kullanarak, tek bir dizeye bu değerlerini birleştirmek konum beri.

Yani aynı tarzda bir her bir kategori için tüm ürünleri almak için, o, bu gibi olurdu

SELECT c.*, 
       GROUP_CONCAT(p.name SEPARATOR ',') as products
FROM CATS c
LEFT JOIN ZW-CAT-PRODUCT l
  ON l.id_cats=c.id
LEFT JOIN PRODUCT p
  ON p.id=l.id_product
GROUP BY c.id

EDIT: (açıklama istendiği gibi) belirli bir kategori için sadece ürün satırları almak için, bu var.

SELECT p.*
FROM PRODUCT p
LEFT JOIN ZW-CAT-PRODUCT l
  ON l.id_product=p.id
LEFT JOIN CATS c
  ON c.id=l.id_cats
WHERE c.name='xyz';