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

Mysql select rekursiv få alle børn med flere niveauer

Ingen af ​​de tidligere løsninger virkede for mig. Begge virker kun, hvis forældrene er gemt i databasen i en bestemt rækkefølge.

Jeg må indrømme, at jeg ikke helt forstår, hvordan forespørgslen fungerer, men kunne finde en måde, der fungerer for mig (i hvert fald bedre end de andre svar).

De data, som den første og anden forespørgsel ikke fungerer med, er:

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

Hvis du bruger den første og anden forespørgsel i dette datasæt, får du for id 5 kun som resultat '6,7'. Men hvis du bruger min forespørgsel, får du:'6,7,2,3,4' som er det forventede resultat.

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;

Håber det hjælper nogen. Jeg kan ikke kommentere eller nedstemme de andre svar på grund af manglende omdømme :(



  1. TSQL Prøv / fang inden for transaktion eller omvendt?

  2. PostgreSQL:Vis tabeller i PostgreSQL

  3. Online migrering fra MySQL 5.6 Non-GTID til MySQL 5.7 med GTID

  4. Tilslutning af IRI-software til Oracle