Không có giải pháp nào trước đây phù hợp với tôi. Cả hai chỉ hoạt động nếu cha mẹ được lưu vào cơ sở dữ liệu theo một thứ tự nhất định.
Tôi phải thừa nhận rằng tôi không hoàn toàn hiểu cách hoạt động của truy vấn nhưng có thể tìm ra cách phù hợp với tôi (ít nhất là tốt hơn các câu trả lời khác).
Dữ liệu mà truy vấn thứ nhất và thứ hai không hoạt động là:
idFolder , FolderName , idFolderParent
1 ADoc Null
2 ADoc1 7
3 ADoc2 2
4 ADoc3 3
5 ADoc4 Null
6 ADoc5 5
7 ADoc6 5
Nếu bạn sử dụng truy vấn thứ nhất và thứ hai trong tập dữ liệu này, đối với id 5, bạn chỉ nhận được kết quả là '6,7'. Nhưng nếu bạn sử dụng truy vấn của tôi, bạn sẽ nhận được:'6,7,2,3,4' là kết quả mong đợi.
Phiên bản của tôi:
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;
Hy vọng nó sẽ giúp một ai đó. Tôi không thể bình luận cũng như không tán thành các câu trả lời khác vì thiếu danh tiếng :(