经过多次尝试,我都无法解决这个问题,所以我决定与你分享,看看你是否能帮助我。
我已经创建了一个高级产品搜索,但我无法根据所选类别过滤产品,我解释说:
我有两张桌子,产品和products_categories。
+------------------+ | 产品 | +-------+----------+ |pr_id |pr_title | +-------+----------+ |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 和三星。
但我想要的是,如果任何产品没有选择不显示任何内容的 3 个类别,因为产品 ID 1 没有类别 ID 8,反之亦然。
我该如何解决这个问题?
使用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
)
你可以尝试使用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)