我需要开发一个好的表结构,用于使用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
现在,您是否介意告诉我开发此类列表的最佳方式? 非常感谢你。
答案 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。完成。