2012-08-15 14 views
5

var:MySQL eşdeğer böyle ... ı bir tablo iki tablo arasında bir kavşak yapım var diyelim mantıksal yapıyor VE yerine

id_product | id_category 
----------------- 
11 | 22 
11 | 33 
12 | 22 
12 | 33 

Ben id_products (ayrı) bir gore almak istiyorum Aranan kategori kimlikleri listesi.

IN() deyimini kullanırsam, id_categories listesi mantıksal bir OR kullanır.

Gönderilen id_categ listesi için mantıksal AND'lara sahip olmak için SELECT sorgusunu nasıl yapabilirim?

Örnek: Bütün id_products 22 VE 33 (. Ve muhtemelen 5+ daha Categ kimlikleri)

Bu cevap buldu kategorisine ait istiyorum: Using MySQL IN clause as all inclusive (AND instead of OR) ... ama sorgu daha karıştırma 1 tablodan ... Sadece tek bir tabloda, birleşme noktasında bir sorgu istiyorum.

+0

Bir kategori aynı anda 22 VE 33'e eşit olabilir mi? – Kermit

+0

Aynı soruyu bir süre önce sordum: http://stackoverflow.com/questions/11157772/sql-query-to-find-products-matching-a-set-of-categories – Tchoupi

+0

@njk Bu birleşim tablosu. .. – hsanders

cevap

6

bağlantınız okuma, ben sadece o id_category almak istiyorsa Kullanmak = gereken bir şey

select id_product 
from yourTable 
where id_category in (--your List goes Here) 
group by id_product 
having count(distinct id_category) = NumberOfElementsOfYourList 

gibi olacağını düşünüyorum, ancak hiçbir diğerleri id_category. Değilse,> =

+1

"HAVING" ifadesinde COUNT (farklı id_product) 'i' COUNT (farklı id_category) 'olarak değiştirdim ... COUNT (farklı id_product)' her bir id_product grubu için her zaman 1 olacaktır. – Arth

+0

Günümü kurtardın bugün. :-) – Krenor

1
select id_product 
from your_table 
where id_category in (22, 33) 
group by id_product 
having count(distinct id_category) = 2 

Bulunmak id_category 's sayan bir having maddeyi ekleyebilir kullanın. Örneğin, 5 kimliğine bakarsanız, having maddesindeki 2 kodunu 5 içinde değiştirmeniz gerekir.

+0

ElVieejo daha hızlıydı, ama teşekkürler! – ecchymose