sql >> Databáze >  >> RDS >> Mysql

Mysql vyberte rekurzivní získat všechny dítě s více úrovněmi

Žádné z předchozích řešení mi nefungovalo. Oba fungují, pouze pokud jsou rodiče uloženi do databáze v určitém pořadí.

Musím přiznat, že úplně nerozumím tomu, jak dotaz funguje, ale mohl bych najít způsob, který by pro mě fungoval (alespoň lepší než ostatní odpovědi).

Data, se kterými první a druhý dotaz nepracují, jsou:

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

Pokud použijete první a druhý dotaz v tomto datovém souboru, pro ID 5 dostanete pouze '6,7'. Ale pokud použijete můj dotaz, dostanete:'6,7,2,3,4', což je očekávaný výsledek.

Moje verze:

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;

Doufám, že to někomu pomůže. Nemohu komentovat ani hlasovat proti ostatním odpovědím kvůli nedostatečné pověsti :(



  1. Příklady ATN2() v SQL Server

  2. použijte příkaz database_name v PostgreSQL

  3. 4 Funkce pro vrácení roku z data v MariaDB

  4. Vyhledávání s diakritikou ve sqlite (android)