如何在php中获取子树表
我有一张这样的桌子:如何在php中获取子树表,php,mysql,Php,Mysql,我有一张这样的桌子: id title parent_id 1 A 0 2 B 0 3 C 1 4 F 3 5 O 3 6 D 2 7 J 6 8 T 2 9 P 8 A C
id title parent_id
1 A 0
2 B 0
3 C 1
4 F 3
5 O 3
6 D 2
7 J 6
8 T 2
9 P 8
A
C
F
O
B
D
J
T
P
现在,如果我给2,这个函数应该返回:
6
8
7
9
4
5
如果我给3,函数应该返回:
6
8
7
9
4
5
- 我不想要只叶节点李>
- 我认为有一个sql查询
SELECT a.id, a.title
FROM tbl AS a
WHERE a.id = :id
UNION
SELECT b.id, b.title
FROM tbl AS a
INNER JOIN tbl AS b ON a.id = b.parent_id
WHERE a.id = :id
UNION
SELECT c.id, c.title
FROM tbl AS a
INNER JOIN tbl AS b ON a.id = b.parent_id
INNER JOIN tbl AS c ON b.id = c.parent_id
WHERE a.id = :id
UNION
SELECT d.id, d.title
FROM tbl AS a
INNER JOIN tbl AS b ON a.id = b.parent_id
INNER JOIN tbl AS c ON b.id = c.parent_id
INNER JOIN tbl AS d ON c.id = d.parent_id
WHERE a.id = :id
...
继续添加查询,直到达到所需的深度。还有其他方法,例如使用存储过程。只有sql:
select id,
title,
parent_id
from (select * from products
order by parent_id, id) base,
(select @pv := '3') tmp
where find_in_set(parent_id, @pv) > 0
and @pv := concat(@pv, ',', id)
这里也有类似的问题和很好的答案:。这可能是一个重复的问题。我认为这不是一个好主意。因为如果我想得到深度50?和
深度
不可用!我相信,如果没有父子关系,内部连接就不会返回结果集。然而,深度越深,它需要的资源就越多