0

我有一个带有物化路径列(matpath)的树结构表。数据如下所示:

ID    MATPATH    PARENT
---------------------
1     NULL       NULL
2     1.         1
3     1.2.       2
4     1.2.3.     3
5     1.2.       2
6     1.2.3.4.   4
7     1.2.5.     5

ETC

给定 ID,如何获取高于(一个查询)或低于(另一个查询)的所有元素?例如,如果ID为7,我想选择除7之外ID为1、2和5的行。如果给定的ID为3,则选择1、2和3。以此类推。

谢谢你。

4

1 回答 1

1

首先,您必须决定是否要在具体.化路径上使用尾随,我假设您确实想要它们,因为它会使生活更轻松。

像这样的东西会给你下面的节点:

select id
from tree
where matpath like (
    select matpath || id || '.%'
    from tree
    where id = X
)

X您感兴趣的节点在哪里。您的树如下所示:

1 --- 2 -+- 3 --- 4 --- 6
         |
         +- 5 --- 7

并且应用带有一些值的上述查询与图表匹配:

X | output
--+--------------
3 | 4, 6
7 |
2 | 3, 4, 5, 6, 7

在客户端中获取给定节点上方的节点更容易:只需抓住matpath,切断尾随.,然后拆分剩下的.. SQLite 的字符串处理支持相当有限,我想不出一种方法来拆分物化路径而不尝试添加用户定义的split函数(我不确定split是否可以添加适当的函数)。

因此,两个查询和一些数据库外的字符串争吵将得到你想要的。

于 2011-09-05T01:43:56.860 回答