Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中获取子树表_Php_Mysql - Fatal编程技术网

如何在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?和
深度
不可用!我相信,如果没有父子关系,内部连接就不会返回结果集。然而,深度越深,它需要的资源就越多