如何根据树中两个节点的贴近度计算得分?

2024-10-02 14:18:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个类别树,其中树中的每个节点都存储为数据库中的一行。采取的方法是nested set。服装店的样本树是:

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销售所有的衣服,所以他们在树中的节点是Clothing
  • 卖家B只卖男装,所以他们的节点是Men's
  • 卖家C只卖西装外套,所以他们的节点是Jackets

因为购物者正在寻找西装外套,所以他们的节点也应该是Jackets

我怎么能把C卖家排得最高呢,因为他们专营西装外套,其次是B卖家,最后是A卖家?你知道吗


Tags: 方法数据库节点range类别nested样本set
1条回答
网友
1楼 · 发布于 2024-10-02 14:18:44

我创建一个表来处理存储:

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。你知道吗

SQL DEMO

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
  ;

输出

enter image description here

相关问题 更多 >