2013-10-08 37 views
4

我有一個電子商務網站(MySql/PHP),我需要在兩個連接的表中獲得一些結果。以下是我擁有的簡化版本:MySql JOIN表結果從一對多關係

Table: product[ 
product_id, 
other_irrelevant_stuff, 
etc. 
] 

Table: product_to_category[ 
product_id, 
category_id 
] 

產品可能有多個類別。我正在使用product p LEFT JOIN product_to_category p2c ON (p2c.product_id = p.product_id)。我需要獲得分配有兩個特定類別的產品的結果。

很明顯,如果我使用p2c.category_id = 1 AND p2c.category_id = 2,我得不到任何結果,因爲沒有符合這些條件的單個訂單項。如果我使用p2c.category_id = 1 OR p2c.category_id = 2,我會從兩個類別(category_id = 1和全部category_id = 2)中獲得我不想要的所有結果。我只想得到有category_id 1category_id 2的產品。

我通常對此很好,但也許我只是有一個大腦放屁。那裏有任何想法?

+1

'product_id IN(SELECT product_id FROM product_to_category WHERE p2c.category_id = 1)AND p2c.category_id = 2' –

+0

感謝David,這完全符合我的需要。 –

回答

1

這應該與distinct工作中使用group bycount

select p.product_id 
from product p 
    join product_to_category pc on p.product_id = pc.product_id 
where pc.category_id in (1,2) 
group by p.product_id 
having count(distinct pc.category_id) = 2 
+0

這很好,可以在很多情況下工作,因爲它在SQL小提琴演示中,但我的實際查詢方式更復雜,所以這不適合我的應用程序。儘管感謝您的幫助。 –

+0

如果您在更復雜的查詢中將它作爲子查詢加入,這應該起作用。 – Barmar

0

只要做到以下...

select distinct tab1.product_id 

from product tab1 

join product_to_category tab2 on tab1.product_id = tab2.product_id 

where tab2.category_id in (1,2) 

group by tab1.product_id; 

試試這個,您的問題將解決。

+0

這將返回處於任一類別中的產品。他只想要在兩個類別中的產品。 – Barmar