Nessuna delle soluzioni precedenti ha funzionato per me. Entrambi funzionano solo se i genitori vengono salvati nel database in un certo ordine.
Devo ammettere che non capisco appieno il modo in cui funziona la query, ma potrei trovare un modo che funzioni per me (almeno meglio delle altre risposte).
I dati con cui la prima e la seconda query non funzionano sono:
idFolder , FolderName , idFolderParent
1 ADoc Null
2 ADoc1 7
3 ADoc2 2
4 ADoc3 3
5 ADoc4 Null
6 ADoc5 5
7 ADoc6 5
Se utilizzi la prima e la seconda query in questo set di dati, per l'ID 5 ottieni solo come risultato "6,7". Ma se usi la mia query ottieni:'6,7,2,3,4' che è il risultato atteso.
La mia versione:
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;
Spero che aiuti qualcuno. Non posso commentare né votare negativamente le altre risposte a causa della mancanza di reputazione :(