gpt4 book ai didi

ms-access - MS ACCESS - 分层树排序

转载 作者:行者123 更新时间:2023-12-03 17:21:31 26 4
gpt4 key购买 nike

我正在努力解决排序问题。

我有一张表,如下所示:

aspect_id (int)
aspect_text (memo)
root_id (int) which has as a foreign key a aspect_id

我有一个包含以下虚拟数据的非循环树:
aspect_id  aspect_text  root_id 

1 root null
2 aspect1 1
3 aspect2 1
4 aspect3 2
5 aspect5 4

在示例中,数据排序正确,而在我的数据库中则没有。我想排序它从根元素开始,然后找到一个子元素,输出该子元素并递归执行。

有了 CTE,这是相当可行的。 Access 不支持此功能。使用 CTE,它将类似于:
WITH aspectTree (aspect_id, root_id, Level#) AS 
(
Select
aspect.aspect_id,
aspect.root_id,
0
FROM aspect
WHERE aspect.aspect_id = 44
UNION ALL
SELECT
aspect.aspect_id,
aspect.root_id,
T.Level# + 1
FROM aspect
INNER JOIN aspectTree AS T
On T.aspect_id = aspect.root_id
)
SELECT * FROM aspectTree;

最佳答案

如果不考虑性能,这个相当简单的解决方案将起作用:

Public Function GetLevel(ByVal lngNodeId As Long) As Long

Dim varRootId As Variant

varRootId = DLookup("root_id", "aspect", "aspect_id=" & lngNodeId)

If IsNull(varRootId) Then
GetLevel = 0
Else
GetLevel = GetLevel(varRootId) + 1
End If

End Function

然后,您可以在 ORDER BY 子句中使用该函数:
SELECT aspect.*
FROM aspect
ORDER BY GetLevel([aspect_id]), aspect_text

关于ms-access - MS ACCESS - 分层树排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1233084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com