Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql seleziona ricorsivo ottieni tutti i bambini con più livelli

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