sql >> Databasteknik >  >> RDS >> Mysql

Mysql select rekursiv få alla barn med flera nivåer

Ingen av de tidigare lösningarna fungerade för mig. Båda fungerar bara om föräldrarna sparas i databasen i en viss ordning.

Jag måste erkänna att jag inte helt förstår hur frågan fungerar men kan hitta ett sätt som fungerar för mig (åtminstone bättre än de andra svaren).

De data som den första och andra frågan inte fungerar med är:

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

Om du använder den första och andra frågan i denna datamängd får du bara som resultat '6,7' för id 5. Men om du använder min fråga får du:'6,7,2,3,4' vilket är det förväntade resultatet.

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

Hoppas det hjälper någon. Jag kan inte kommentera eller nedrösta de andra svaren på grund av bristande rykte :(



  1. LÖST:Microsoft Office 365 version 2009 kan bryta din databasapplikation

  2. MariaDB SYSTEM_USER() Förklarad

  3. Vilka är begränsningarna för SQL Server Compact? (Eller - hur väljer man en databas att använda på MS-plattformar?)

  4. Beställ en MySQL-tabell med två kolumner