向下递归
SELECT T3.id FROM ( SELECT @ids AS _ids, ( SELECT @ids := GROUP_CONCAT(id) FROM yd_file_folder WHERE FIND_IN_SET(parent_id, @ids) ) AS T1, @l := @l + 1 AS level_ FROM yd_file_folder, (SELECT @ids := {$pid}, @l := - 1) T4 WHERE @ids IS NOT NULL ) T2, yd_file_folder T3 WHERE FIND_IN_SET(T3.id, T2._ids) ORDER BY level_, id
向上递归
SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM yd_file_folder WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 5, @l := 0) vars,
yd_file_folder h
WHERE @r <> 0) T1
JOIN yd_file_folder T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC;