提问者:小点点

如何在MySQL中将多行筛选器应用到一个连接的表中?[副本]


我正在一个项目中工作,我想展示产品,受到某些过滤器。假设我有以下2张表:

产品

id   name
--------------
1    'Product 1'
2    'Product 2'

筛选器

product_id   filter_id
----------------------
1            a
1            b
2            a

我正在尝试编写一个查询,该查询仅在设置了过滤器的情况下返回产品。因此,如果过滤器'a'是活动的,结果应该是乘积1和2,如果'a'和'b'是活动的,它应该只返回乘积1。

我试过:

SELECT p.id
FROM products p
LEFT JOIN filters f ON f.product_id = p.id
WHERE filter.id = 'a'
GROUP BY p.id

这将按预期返回产品%1和%2的ID。然而,当我尝试:

SELECT p.id
FROM products p
LEFT JOIN filters f ON f.product_id = p.id
WHERE filter.id = 'a' AND filter.id = 'b'
GROUP BY p.id

我希望它返回产品1的id,但它没有返回任何结果。如何重写查询,以便获得活动筛选器的产品ID?这能用MySQL单独完成吗,还是我必须用PHP循环遍历结果?


共1个答案

匿名用户

您的查询只需要稍作更改:使用OR而不是AND...将其更改为:

SELECT p.id
FROM products p
LEFT JOIN filters f ON f.product_id = p.id
WHERE filter_id in ('a','b')
GROUP BY p.id
HAVING COUNT(*) = no_of_filters