我有三个复选框和一个仅显示交叉点的附加选项
复选框
和另一个复选框说:检查以显示交叉点
因此当有人选择Green时,他们需要查看所有绿色产品,如果他们选择Green and Social,他们会看到所有附有绿色标签或社交标签的产品,这可以通过WHERE product_category_id IN来完成。 (1,11)等等。
现在,当有人检查绿色和社交,并且附加复选框仅显示交叉点时我想只显示产品eaxactly两个标签已分配。即只有那些同时具有绿色和社会标签而忽略其余标签的人。
从下表中的绿色和社交应该返回
id organisation_name
-----------------------------------------------
3221 Nederlandse Watershapsbank NV
如果有人选择绿色,可持续和社交以及相交选项,他们应该只看到
id organisation_name
--------------------------------
21 Uppsalahem AB
希望我尽力解释,如果您需要更多信息,请告诉我。
产品表
id issuer
-------------------------
1 1
11 1741
21 21
31 31
41 3221
51 51
组织表
id organisation_name
----------------------------------------
1 Nordic Investment Bank
21 Uppsalahem AB
31 Stangastaden
51 European Investment Bank
1741 Global Infrastructure Partners
3221 Nederlandse Watershapsbank NV
项目类别表
id product_id product_category_id
--------------------------------------------------
1 1 1
2 11 1
3 21 1
4 31 1
5 41 1
5 41 61
6 51 1
6 51 11
6 21 61
6 21 11
项目类别表
id product_category_name
--------------------------------------
1 Green
11 Sustainable
61 Social
SQL:
SELECT Products.id,
Organisation.organisation_name,
ProductCategory.product_category_id,
ProductCategory.product_id
FROM `Products`
LEFT JOIN `product_category` `ProductCategory` ON ProductCategory.product_id=Products.id
LEFT JOIN `organisation` `Organisation` ON Organisation.id=Products.issuer
LEFT JOIN `categories` `Categories` ON Categories.id=ProductCategory.product_category_id
WHERE `ProductCategory`.`product_category_id` IN (1, 11)
GROUP BY Products.id HAVING COUNT(*) = 2
ORDER BY Products.id ASC;
提前多多感谢。非常感谢您的努力。
答案 0 :(得分:0)
虽然我可能会在表示层中执行此操作,但您正在寻找的逻辑如下:
...GROUP BY ... HAVING COUNT(DISTINCT ...) = n
其中:
DISTINCT是可选的但不会造成伤害
和
n等于IN()
中的参数个数