Mysql return 只有具有 n 个 属性 匹配项的项目
Mysql return only items that have n number of property matches
我有一个项目数据库,每个项目都有不同数量的属性。当搜索为 运行 时,MySql 是否可能仅针对具有一定数量匹配项(而非属性)的 return 项?
示例:我正在搜索任何带有红色车轮和轮胎的商品。
这将 return 所有具有这三个匹配项的项目,即使它们具有更多属性,也会自动排除任何少于 3 个匹配项的项目。
我试过使用 COUNT + GROUP BY + HAVING,但无法组合出有意义的工作代码。在我花更多时间之前,我想知道这是否可能。
TABLE 设计
ID ITEM PROPERTY
1 1 red
2 1 wheel
3 1 tire
4 2 red
5 2 wheel
6 2 tire
7 2 lamp
8 3 red
9 3 wheel
10 4 red
我想要 return 项目 1 和 2
您可以使用 group by
和 having
来执行此操作。您确实没有提供有关您的数据结构的信息,但基本思想是:
select ip.item
from design ip
where ip.property in ('wheel', 'red', 'tire')
group by ip.item
having count(distinct ip.property) = 3;
我有一个项目数据库,每个项目都有不同数量的属性。当搜索为 运行 时,MySql 是否可能仅针对具有一定数量匹配项(而非属性)的 return 项?
示例:我正在搜索任何带有红色车轮和轮胎的商品。 这将 return 所有具有这三个匹配项的项目,即使它们具有更多属性,也会自动排除任何少于 3 个匹配项的项目。
我试过使用 COUNT + GROUP BY + HAVING,但无法组合出有意义的工作代码。在我花更多时间之前,我想知道这是否可能。
TABLE 设计
ID ITEM PROPERTY
1 1 red
2 1 wheel
3 1 tire
4 2 red
5 2 wheel
6 2 tire
7 2 lamp
8 3 red
9 3 wheel
10 4 red
我想要 return 项目 1 和 2
您可以使用 group by
和 having
来执行此操作。您确实没有提供有关您的数据结构的信息,但基本思想是:
select ip.item
from design ip
where ip.property in ('wheel', 'red', 'tire')
group by ip.item
having count(distinct ip.property) = 3;