sql >> Database >  >> RDS >> Mysql

Mysql selecteer recursief haal alle kinderen met meerdere niveaus

Geen van de vorige oplossingen werkte voor mij. Beide werken alleen als de ouders in een bepaalde volgorde in de database zijn opgeslagen.

Ik moet toegeven dat ik de manier waarop de zoekopdracht werkt niet helemaal begrijp, maar ik zou een manier kunnen vinden die voor mij werkt (in ieder geval beter dan de andere antwoorden).

De gegevens waarmee de eerste en tweede zoekopdracht niet werken zijn:

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

Als u de eerste en tweede query in deze dataset gebruikt, krijgt u voor de id 5 alleen als resultaat '6,7'. Maar als je mijn query gebruikt, krijg je:'6,7,2,3,4', wat het verwachte resultaat is.

Mijn versie:

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;

Hoop dat het iemand helpt. Ik kan de andere antwoorden niet becommentariëren of neerstemmen vanwege een gebrek aan reputatie :(



  1. Belang van transactielogboek in SQL Server

  2. Converteer 'datetime' naar 'datetime2' in SQL Server (T-SQL-voorbeelden)

  3. Wat doet ::in PostgreSQL?

  4. Selecteer xml-elementwaarde in Oracle