Recursive Query
Of weet iemand waar dat gedocumenteerd word?
Leg eens even uit wat je wilt ;-)
PHP Newbie schreef op 22.09.2008 18:02:
Leg eens even uit wat je wilt ;-)
Gewoon in 1 tabel parent en child records opslaan en opvragen
parent_id,id, omschrijving
0,1 project
1,1 project child
1,2 project child2
0,2 taak
2,1 taak child
etc.
en die recursief opvragen
dit?
Is dat niet zoiets als hier kijken onder het kopje "The Nested Set Model".
Wat Karl daar zegt is een goede optie, maar als je iets verder wilt gaan, kun je ook eens Karl schreef op 22.09.2008 18:48:
Is dat niet zoiets als dit?
Daar doen ze precies wat ik bedoel, maar dan in PHP source.
Maar waarom zou je het daar doen als de database het zelf ook kan, ik weet dat het kan maar hoe exact is nu de vraag.
Dit is een voorbeeld maar duidelijk vind ik het niet:
WITH DirectReports (ManagerID, EmployeeID, Title, DeptID, Level)
AS
(
-- Anchor member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, edh.DepartmentID,
0 AS Level
FROM HumanResources.Employee AS e
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.EmployeeID = edh.EmployeeID AND edh.EndDate IS NULL
WHERE ManagerID IS NULL
UNION ALL
-- Recursive member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, edh.DepartmentID,
Level + 1
FROM HumanResources.Employee AS e
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.EmployeeID = edh.EmployeeID AND edh.EndDate IS NULL
INNER JOIN DirectReports AS d
ON e.ManagerID = d.EmployeeID
)
-- Statement that executes the CTE
SELECT ManagerID, EmployeeID, Title, Level
FROM DirectReports
INNER JOIN HumanResources.Department AS dp
ON DirectReports.DeptID = dp.DepartmentID
WHERE dp.GroupName = N'Research and Development' OR Level = 0;
Dus een iets eenvoudiger voorbeeld zou prettig zijn.
Herjan schreef op 22.09.2008 18:53:
Wat Karl daar zegt is een goede optie, maar als je iets verder wilt gaan, kun je ook eens hier kijken onder het kopje "The Nested Set Model".
Hier doen ze ook wel iets wat er op lijkt, maar zoals je ziet is de set velden telkens een andere.
Met een UNION blijft je veld set gelijk, en is dus absoluut abstract te gebruiken.
Je kan 1 tot veel verschillende childs, en daaronder ook weer childs, hebben en dat is in gebruik het grote voordeel.