0

经过多次尝试,我无法解决这个问题,所以我决定与您分享,看看您是否可以帮助我。

我创建了一个高级产品搜索,但我无法根据所选类别过滤产品,我解释说:

我有两张表,products 和 products_categories。

+------------------+
| 产品 |
+--------+----------+
| pr_id | 公关标题 |
+--------+----------+
| 1 | 苹果手机 |
+--------+----------+
| 2 | 三星 |
+--------+----------+
| 3 | 小米 |
+--------+----------+
+----------------------------+
| 产品分类 |
+------------+-------------+
| ct_product | ct_category |
+------------+-------------+
| 1 | 5 |
+------------+-------------+
| 1 | 7 |
+------------+-------------+
| 2 | 8 |
+------------+-------------+

我只想过滤具有所选类别的产品,例如,我的 mysql 查询是:

SELECT * products WHERE products.pr_id IN (SELECT ct_product FROM products_categories WHERE ct_category IN (5, 8, 7)

此查询的结果是 Iphone 和 Samsung。

但我想要的是,如果任何产品没有选择不显示任何内容的 3 个类别,因为产品 id 1 没有类别 id 8,反之亦然。

我该如何解决这个问题?

4

2 回答 2

2

采用distinct count()

SELECT * products WHERE products.pr_id IN(
select ct_product
from products_categories
where  ct_category IN (5, 8, 7)
group by ct_product
having count(distinct ct_category)=3
)
于 2019-10-11T08:20:03.467 回答
0

您可以尝试使用inner join

SELECT * products p
INNER JOIN products_categories pc on pc.ct_product = p.pr_id
WHERE pc.ct_category IN (5, 8, 7)
于 2019-10-11T08:23:08.153 回答