Ingen av de tidigare lösningarna fungerade för mig. Båda fungerar bara om föräldrarna sparas i databasen i en viss ordning.
Jag måste erkänna att jag inte helt förstår hur frågan fungerar men kan hitta ett sätt som fungerar för mig (åtminstone bättre än de andra svaren).
De data som den första och andra frågan inte fungerar med är:
idFolder , FolderName , idFolderParent
1 ADoc Null
2 ADoc1 7
3 ADoc2 2
4 ADoc3 3
5 ADoc4 Null
6 ADoc5 5
7 ADoc6 5
Om du använder den första och andra frågan i denna datamängd får du bara som resultat '6,7' för id 5. Men om du använder min fråga får du:'6,7,2,3,4' vilket är det förväntade resultatet.
Min version:
SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder
WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder
JOIN
(SELECT @pv:=5) tmp
) a;
Hoppas det hjälper någon. Jag kan inte kommentera eller nedrösta de andra svaren på grund av bristande rykte :(