Ż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 :(