Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql wybierz rekurencyjne pobierz wszystkie dzieci z wieloma poziomami

Żadne z poprzednich rozwiązań u mnie nie zadziałało. Oba działają tylko wtedy, gdy rodzice są zapisani w bazie danych w określonej kolejności.

Muszę przyznać, że nie w pełni rozumiem sposób działania zapytania, ale mogę znaleźć sposób, który będzie dla mnie odpowiedni (przynajmniej lepszy niż inne odpowiedzi).

Dane, z którymi nie działają pierwsze i drugie zapytanie, to:

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

Jeśli użyjesz pierwszego i drugiego zapytania w tym zbiorze danych, dla id 5 otrzymasz tylko wynik '6,7'. Ale jeśli użyjesz mojego zapytania, otrzymasz:„6,7,2,3,4”, co jest oczekiwanym wynikiem.

Moja wersja:

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;

Mam nadzieję, że komuś pomoże. Nie mogę komentować ani odrzucać innych odpowiedzi z powodu braku reputacji :(



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fałszywe ograniczenie klucza obcego nie działa

  2. Jak przywrócić plik zrzutu z mysqldump?

  3. ALTER TABLE w MySQL:przyjaciel czy wróg?

  4. Składnia bazy danych SQL ALTER – wymienione przez DBMS

  5. Uzyskaj aktualną wartość AUTO_INCREMENT dla dowolnej tabeli