Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql select recursive get all child with multiple level

Keine der vorherigen Lösungen hat bei mir funktioniert. Beides funktioniert nur, wenn die Eltern in einer bestimmten Reihenfolge in der Datenbank gespeichert werden.

Ich muss zugeben, dass ich die Funktionsweise der Abfrage nicht vollständig verstehe, aber einen Weg finden könnte, der für mich funktioniert (zumindest besser als die anderen Antworten).

Die Daten, mit denen die erste und zweite Abfrage nicht funktionieren, sind:

idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           7  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4          Null
   6           ADoc5           5
   7           ADoc6           5

Wenn Sie die erste und zweite Abfrage in diesem Datensatz verwenden, erhalten Sie für die ID 5 nur „6,7“ als Ergebnis. Aber wenn Sie meine Abfrage verwenden, erhalten Sie:'6,7,2,3,4', was das erwartete Ergebnis ist.

Meine 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;

Hoffe es hilft jemandem. Ich kann die anderen Antworten wegen mangelnder Reputation weder kommentieren noch ablehnen :(