0

我需要开发一个良好的表结构来使用 SQL Server 数据库创建可排序的多级列表。

这是我开发可排序多级列表的方式的示例:

A
├──B
|  ├──E
|  ├──F
|  ├──O
|
├──C
|  ├──M
|

我的表结构:

ID   Title   Parent   Sort
---------------------------
1    A       Null     0
2    B       A        0
3    E       B        0
4    F       B        1
5    O       B        2
6    C       A        1
7    M       C        0

现在,您介意告诉我开发此类列表的最佳方法吗?非常感谢你。

4

2 回答 2

1

只需按照您概述的结构即可。SQL Server 支持通过 CTE 进行递归查询,类似这样的方法可以为您解决问题:

WITH tree AS (
  SELECT id, name, parent,
         0 AS level,
         CAST(sort AS varchar(90)) AS path,
         CAST(name AS varchar(90)) AS fullname
    FROM test WHERE parent IS NULL
  UNION ALL
  SELECT t.id, t.name, t.parent, tree.level + 1,
         CAST(tree.path + '.' + CAST(t.sort AS varchar) AS varchar(90)),
         CAST(tree.fullname + '.' + t.name AS varchar(90))
    FROM test t
    JOIN tree ON t.parent = tree.name
)
SELECT id, name, parent, level, path, fullname FROM tree
ORDER BY path;

我在这里建立一些额外的信息字段:

  • level, 表示节点距根的深度;
  • path,它是根据您的sort字段构建的,用于对树进行正确排序;
  • fullname- 只是完整节点名称的一个很好的视图。

您可以在此处尝试此查询。

请考虑数据的大小——对于巨大的数据结构,您可能希望将谓词推送到内部查询中以获得更好的性能。

于 2012-05-12T19:11:13.540 回答
0

设计一张包含所有必需详细信息的表,添加 ID 和 ParentID,在 ID 上右外连接 ParentID。完毕。

于 2012-05-12T18:49:00.450 回答