你能再帮我一次吗?
有两张桌子!在这里:

Products
ID             |          Name
1                         X Product
2                         Y Product
3                         Z Product

Filters
ID             |          Name
1                         X Filter
2                         Y Filter
3                         Z Filter

Product_Filter
Product_ID     |          Filter_ID
1                         1
1                         2
2                         1
2                         2
2                         3
3                         3

此透视表包含:
X产品有X过滤器和Y过滤器
Y产品有X过滤器和Y过滤器和Z过滤器
Z产品有Z过滤器
我有这个sql代码,通过定义X过滤器的ID可以得到X和Y产品。
SELECT DISTINCT `products`.*
FROM `products`
  JOIN `filters` ON `products`.`id` = `filters`.`id`
WHERE `product_filter`.`filter_id` = 1;

如果我想得到只包含X过滤器和Z过滤器的产品呢?
像这样放从句,但当然不行
WHERE `product_filter`.`filter_id` = 1
  and 'product_filter'.'filter_id' = 69;

最佳答案

您需要使用group by和having count,同时在一个列上匹配两个条件

select
p.* from Products p
join Product_Filter pf on pf.Product_ID = p.ID
join Filters f on f.ID = pf.Filter_ID
where pf.filter_id in (1,69)
group by p.ID
having count(*) = 2

http://sqlfiddle.com/#!9/22c96/1

关于php - 如何将“与”子句放入多对多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31114046/

10-10 06:34