每个实体可以有一个父母。我需要找到给定实体的所有后代。
只用SQL吗?
我只能用脚本来思考,它不会像单独的sql一样快。
我正在使用PHP和MS SQL Server 2005,以及doctrine 2 DBAL
答案 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。