是否可以使用SQL来查找所有具有最常见类别的品牌?
例如,品牌"Dove“可以有肥皂、护肤品、洗发水等类别,它是找出所有类别匹配最多的品牌,换句话说,是最相似的品牌。
这可以使用Ruby或PHP以编程方式完成:只需获取一个品牌,遍历所有其他品牌,看看有多少匹配的类别,并按其排序。但是如果有2000个品牌,那么每个品牌需要2000个查询。(除非我们预先缓存了所有2000个查询结果,因此对于所有2000个品牌,我们将重用这些结果)
可以通过SQL / MySQL通过一次查询来完成吗?
比方说,这个表有:
entities
--------
id
type = brand or category or product
name
entities_parent_child
--------------------
parent_id
child_id上表为每个parent =品牌和child = product都有一个条目,也为每个parent = category和child = product都有一个条目,因此品牌必须按产品与类别相关。
我认为SQL最难的部分是:找到所有最大匹配计数,并按这些数字排序。
发布于 2010-10-01 17:21:15
我同意wuputah的评论。对于这个问题,“实体”表不是答案。当你说你不能形成一个查询来得到你想要的答案时,你已经给了你自己一个提示,设计是错误的。
为您的数据创建一个适当的层次结构,为单独的真实世界实体创建单独的表,您的将是:
[Brands]
[Categories]
[Products]如果您需要在SQL中定义树和层次结构的帮助,我建议您选择一份Celko的Trees and Hierarchies in SQL for Smarties。
SQL没有多态性的概念,所以不要试图设计适合您的编程语言的数据库。数据库与集合一起工作,所以在集合中思考。
要查找相似的品牌,请加入您的表格并使用分组:
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所有最大匹配计数,并按这些数字排序
然后,我可以帮助重新设计查询,如果需要的话,还可以重新设计模式设计。
https://stackoverflow.com/questions/3835953
复制相似问题