Как отменить результаты этого запроса? - PullRequest
1 голос
/ 21 июля 2011

Я использую Firebird 2.1.Существует имя таблицы «Папки» со следующими полями:

FolderID
ParentFolderID
FolderName

ParentFolderID равен -1, если это корневая папка, в противном случае он содержит идентификатор родительской папки.

Следующий рекурсивный запрос вернетРодители папки, в следующем порядке:

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

Результат будет примерно таким:

Родитель \ Родитель \ Родитель \ Родитель

Какмогу ли я отменить результаты вышеуказанного запроса, чтобы получить:

Родительский родитель \ Parent \ Child?

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Порядок значений, возвращаемых 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
        )

, однако это не гарантируется идаже если это произойдет случайно, он может сломаться с любой новой версией.

0 голосов
/ 21 июля 2011

Добавьте вычисляемое поле int в первый оператор выбора в иерархии и увеличьте его.Таким образом, результат иерархии будет инкрементно заполнен для обратной сортировки.

Обратите внимание, я не парень Firebird, так что это всего лишь предложение.

...