Recursive Query

Overzicht Reageren

Cees St

Cees St

22/09/2008 17:49:00
Quote Anchor link
Heeft iemand ervaring met recursive queries in MySQL?

Of weet iemand waar dat gedocumenteerd word?
 
PHP hulp

PHP hulp

11/08/2022 23:29:14
 
PHP Newbie

PHP Newbie

22/09/2008 18:02:00
Quote Anchor link
Leg eens even uit wat je wilt ;-)
 
Cees St

Cees St

22/09/2008 18:12:00
Quote Anchor link
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
 

22/09/2008 18:48:00
Quote Anchor link
Is dat niet zoiets als dit?
 
- -

- -

22/09/2008 18:53:00
Quote Anchor link
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".
 
Cees St

Cees St

22/09/2008 19:00:00
Quote Anchor link
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.
 
Cees St

Cees St

22/09/2008 19:08:00
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.