Python 如何根据树中两个节点的贴近度计算分数?
假设我有一个类别树,其中树中的每个节点都存储为数据库中的一行。所采取的方法是一种有效的方法。服装店的样本树为:Python 如何根据树中两个节点的贴近度计算分数?,python,postgresql,tree,taxonomy,nested-sets,Python,Postgresql,Tree,Taxonomy,Nested Sets,假设我有一个类别树,其中树中的每个节点都存储为数据库中的一行。所采取的方法是一种有效的方法。服装店的样本树为: id | name | left_range | right_range ---+----------------------------------+------------+------------- 0 | Clothing | 1 | 22
id | name | left_range | right_range
---+----------------------------------+------------+-------------
0 | Clothing | 1 | 22
1 | Men's | 2 | 9
2 | Suits | 3 | 8
3 | Slacks | 4 | 5
4 | Jackets | 6 | 7
5 | Women's | 10 | 21
5 | Dresses | 11 | 16
5 | Evening Gowns | 12 | 13
5 | Sundresses | 14 | 15
5 | Skirts | 17 | 18
5 | Blouses | 19 | 20
比如说,我有一位购物者正在寻找西装夹克,我有三位卖家,我可能想向购物者推荐他们:
- 卖家A销售所有衣服,因此他们在树中的节点是
衣服
- 卖家B只卖男装,所以他们的节点是
men's
- 卖家C只销售西装夹克,所以他们的节点是
jackets
夹克
我怎样才能把卖家C排在首位,因为他们专营西装夹克,其次是卖家B,最后是卖家A?我创建了一个表格来处理店铺:
CREATE TABLE Stores
("store_id" int, "name" varchar(13))
;
INSERT INTO Stores
("store_id", "name")
VALUES
('Seller A', 'Clothing'),
('Seller B', 'Men''s'),
('Seller C', 'Jackets')
;
以下是查询:
这会将商店类别与其他类别进行比较,以了解商品的专业化程度。而更具体的项目属于更多的子类别,并有更高的计数
有衣服的商店没有人,所以他们的数量是0
SELECT S1.store_id, COUNT(C2."name")
FROM Stores S1
JOIN Categories C1
ON S1."name" = C1."name"
LEFT JOIN Categories C2
ON C1."left_range" > C2."left_range"
AND C1."right_range" < C2."right_range"
GROUP BY S1.store_id
ORDER BY COUNT(C2."name") DESC
;
选择S1.store\u id,COUNT(C2.“name”)
来自商店S1
加入类别C1
在S1上,“名称”=C1。“名称”
左连接类别C2
在C1上,“左_范围”>C2。“左_范围”
C1.“右范围”
输出
我只是想知道,因为我第一次看到这个模型时,为什么不使用父子关系呢?假设每个节点也有一个parent\u id列,对于根节点
Clothing
来说它是空的,但是您想要哪一个?因为它们的计算非常不同。你能更新数据吗?按右范围-左范围的顺序更新吗
?对这个答案有什么评论吗?