如何用SQL查找所有后代?

时间:2011-09-30 18:26:08

标签: php sql sql-server sql-server-2005

每个实体可以有一个父母。我需要找到给定实体的所有后代。

只用SQL吗?

我只能用脚本来思考,它不会像单独的sql一样快。

我正在使用PHP和MS SQL Server 2005,以及doctrine 2 DBAL

2 个答案:

答案 0 :(得分:2)

对于SQL Server 2005+,您可以使用recursive 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 :(得分:1)

PHP将一次运行一个SQL语句,因此您需要在循环中创建此列表。一个好的选择是使用nested sets