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
来说它是空的,但是您想要哪一个?因为它们的计算非常不同。你能更新数据吗?
按右范围-左范围的顺序更新吗
?对这个答案有什么评论吗?