By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table tblreport (
ID int,
Name varchar(10),
ParentID int
);
Insert into tblreport(ID, Name, ParentID)Values(1, '1st', null)
,(2, '2nd', 1)
,(3, '3rd', 1)
,(4, '4th', 2)
,(5, '5th', 3);
SET @var = 1
SELECT *
FROM tblreport
WHERE FIND_IN_SET(ID,(SELECT GROUP_CONCAT(lv SEPARATOR ',')
FROM (SELECT @pv:=(SELECT GROUP_CONCAT(ID SEPARATOR ',')
FROM tblreport
WHERE ParentID IN (@pv)) AS lv
FROM tblreport
JOIN (SELECT @pv:=@var)tmp
WHERE ParentID IN (@pv)) a))
UNION ALL
SELECT *
FROM tblreport
WHERE ID = @var
ORDER BY ID;
ID | Name | ParentID |
---|---|---|
1 | 1st | null |
2 | 2nd | 1 |
3 | 3rd | 1 |
4 | 4th | 2 |