1

我正在使用火鸟 2.1。有一个表名文件夹,具有以下字段:

FolderID
ParentFolderID
FolderName

如果它是根文件夹,则 ParentFolderID 为 -1 - 否则它包含父文件夹的 ID。

以下递归查询将按顺序返回文件夹的父级:

WITH RECURSIVE hierarchy (folderid, ParentFolderId, FolderName) as (
   SELECT folderid, ParentFolderId, FolderName
   FROM folders
   WHERE folderid = :folderid

   UNION ALL

   SELECT folderid, ParentFolderId, FolderName
   FROM folders f
     JOIN hierarchy p ON p.parentFolderID = f.folderID
)
SELECT List(FolerName, ' \ ') FROM hierarchy

结果将类似于:

孩子\父母\父母的父母

如何反转上述查询的结果以获得:

父母的父母\父母\孩子?

谢谢!

4

2 回答 2

1

返回值的顺序LIST未定义。

您可以尝试将查询包装到子选择中:

WITH RECURSIVE
        hierarchy (folderid, ParentFolderId, FolderName, rn) AS
        (
        SELECT  folderid, ParentFolderId, FolderName, 1
        FROM    folders
        WHERE   folderid = :folderid
        UNION ALL
        SELECT  folderid, ParentFolderId, FolderName, p.rn + 1
        FROM    folders f
        JOIN    hierarchy p
        ON      p.parentFolderID = f.folderID
        )
SELECT  LIST(FolderName, ' \ ')
FROM    (
        SELECT  *
        FROM    hierarchy
        ORDER BY
                rn DESC
        )

,但是,这不能保证有效,即使它是偶然的,它也可能与任何新版本一起破坏。

于 2011-07-21T12:51:46.837 回答
0

在层次结构的第一个 select 语句中添加一个计算的 int 字段,并将其递增。这样,层次结构的结果将具有增量归档以进行反向排序。

注意,我不是火鸟人,所以这只是一个建议。

于 2011-07-21T12:43:05.440 回答