Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql select recursive get all child avec plusieurs niveaux

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 :(