sql >> Base de Datos >  >> RDS >> Mysql

Mysql select recursive get all child with multiple level

Ninguna de las soluciones anteriores funcionó para mí. Ambos solo funcionan si los padres se guardan en la base de datos en un orden determinado.

Debo admitir que no entiendo completamente la forma en que funciona la consulta, pero podría encontrar una forma que funcione para mí (al menos mejor que las otras respuestas).

Los datos con los que no funcionan la primera y segunda consulta son:

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 usa la primera y la segunda consulta en este conjunto de datos, para el id 5 solo obtiene como resultado '6,7'. Pero si usa mi consulta, obtiene:'6,7,2,3,4', que es el resultado esperado.

Mi versión:

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;

Espero que ayude a alguien. No puedo comentar ni rechazar las otras respuestas debido a la falta de reputación :(