开发可排序多级列表的最佳结构是什么?

时间:2012-05-12 18:39:00

标签: c# sql sql-server common-table-expression recursive-query

我需要开发一个好的表结构,用于使用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

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

2 个答案:

答案 0 :(得分: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 - 只是对完整节点名称的一个很好的看法。

您可以尝试此查询here

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

答案 1 :(得分:0)

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