4

我有一个电子商务站点(MySql / PHP),我需要在两个连接表中获得一些结果。这是我所拥有的简化版本:

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的两个类别(ALL ofcategory_id = 1和A​​LL of )中获得所有结果。category_id = 2我只想获得同时具有category_id 1AND的产品category_id 2

我通常很擅长这个,但也许我只是在放屁。有什么想法吗?

4

2 回答 2

1

这应该使用group byand countwith工作distinct

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
于 2013-10-08T17:17:08.193 回答
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;

试试这个,你的问题就解决了。

于 2014-05-09T07:49:05.280 回答