Aucune des solutions précédentes n'a fonctionné pour moi. Les deux ne fonctionnent que si les parents sont enregistrés dans la base de données dans un certain ordre.
Je dois admettre que je ne comprends pas entièrement le fonctionnement de la requête, mais je pourrais trouver un moyen qui fonctionne pour moi (au moins mieux que les autres réponses).
Les données avec lesquelles les première et seconde requêtes ne fonctionnent pas sont :
idFolder , FolderName , idFolderParent
1 ADoc Null
2 ADoc1 7
3 ADoc2 2
4 ADoc3 3
5 ADoc4 Null
6 ADoc5 5
7 ADoc6 5
Si vous utilisez les première et deuxième requêtes dans cet ensemble de données, pour l'identifiant 5, vous obtenez uniquement comme résultat '6,7'. Mais si vous utilisez ma requête, vous obtenez :'6,7,2,3,4' qui est le résultat attendu.
Ma 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;
J'espère que cela aide quelqu'un. Je ne peux pas commenter ni rejeter les autres réponses à cause du manque de réputation :(