Нито едно от предишните решения не работи за мен. И двете работят само ако родителите са записани в базата данни в определен ред.
Трябва да призная, че не разбирам напълно начина, по който работи заявката, но мога да намеря начин, който работи за мен (поне по-добър от другите отговори).
Данните, с които първата и втората заявка не работят, са:
idFolder , FolderName , idFolderParent
1 ADoc Null
2 ADoc1 7
3 ADoc2 2
4 ADoc3 3
5 ADoc4 Null
6 ADoc5 5
7 ADoc6 5
Ако използвате първата и втората заявка в този набор от данни, за идентификатора 5 получавате само '6,7'. Но ако използвате моята заявка, получавате:„6,7,2,3,4“, което е очакваният резултат.
Моята версия:
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;
Дано помогне на някого. Не мога да коментирам или да отслабвам другите отговори поради липса на репутация :(