Как найти всех потомков с SQL? - PullRequest
0 голосов
/ 30 сентября 2011

Каждый объект может иметь одного родителя. Мне нужно найти всех потомков данного лица.

Возможно ли это только с помощью SQL?

Я могу думать только в терминах сценария, и он не будет таким же быстрым, как только SQL.

Я использую PHP и MS SQL Server 2005 и доктрину 2 DBAL

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Для SQL Server 2005+ можно использовать рекурсивный CTE .

WITH cteRecursion AS (
    SELECT PrimaryKey, 1 AS Level
        FROM YourTable
        WHERE PrimaryKey = @GivenEntity
    UNION ALL
    SELECT t.PrimaryKey, c.Level+1
        FROM YourTable t
            INNER JOIN cteRecursion c
                ON t.ParentKey = c.PrimaryKey
)
SELECT PrimaryKey, Level
    FROM cteRecursion
    ORDER BY Level, PrimaryKey;
1 голос
/ 30 сентября 2011

PHP будет запускать одну инструкцию SQL за раз, поэтому вам нужно будет создать этот список в цикле.Хорошей альтернативой является использование вложенных наборов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...