首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用SQL / MySQL找到具有最常见子项的项吗?

可以使用SQL / MySQL找到具有最常见子项的项吗?
EN

Stack Overflow用户
提问于 2010-10-01 09:29:37
回答 1查看 179关注 0票数 0

是否可以使用SQL来查找所有具有最常见类别的品牌?

例如,品牌"Dove“可以有肥皂、护肤品、洗发水等类别,它是找出所有类别匹配最多的品牌,换句话说,是最相似的品牌。

这可以使用Ruby或PHP以编程方式完成:只需获取一个品牌,遍历所有其他品牌,看看有多少匹配的类别,并按其排序。但是如果有2000个品牌,那么每个品牌需要2000个查询。(除非我们预先缓存了所有2000个查询结果,因此对于所有2000个品牌,我们将重用这些结果)

可以通过SQL / MySQL通过一次查询来完成吗?

比方说,这个表有:

代码语言:javascript
复制
entities
--------
id
type =  brand or category or product
name


entities_parent_child
--------------------
parent_id
child_id

上表为每个parent =品牌和child = product都有一个条目,也为每个parent = category和child = product都有一个条目,因此品牌必须按产品与类别相关。

我认为SQL最难的部分是:找到所有最大匹配计数,并按这些数字排序。

EN

回答 1

Stack Overflow用户

发布于 2010-10-01 17:21:15

我同意wuputah的评论。对于这个问题,“实体”表不是答案。当你说你不能形成一个查询来得到你想要的答案时,你已经给了你自己一个提示,设计是错误的。

为您的数据创建一个适当的层次结构,为单独的真实世界实体创建单独的表,您的将是:

代码语言:javascript
复制
[Brands] 
[Categories]
[Products]

如果您需要在SQL中定义树和层次结构的帮助,我建议您选择一份Celko的Trees and Hierarchies in SQL for Smarties

SQL没有多态性的概念,所以不要试图设计适合您的编程语言的数据库。数据库与集合一起工作,所以在集合中思考。

要查找相似的品牌,请加入您的表格并使用分组:

代码语言:javascript
复制
SELECT Brands.brand_name, COUNT(Categores.category_name) as category_count
FROM Brands INNER JOIN Categories
ON Brands.brand_name = Categories.brand_name
GROUP BY Brands.brand_name
ORDER BY Brands.brand_name, COUNT(Categores.category_name) -- add DESC if you want largest count at the top

这为您提供了基本的概念,如果您可以扩展需求的话:

...find所有最大匹配计数,并按这些数字排序

然后,我可以帮助重新设计查询,如果需要的话,还可以重新设计模式设计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3835953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档