2

我有一张如下表。

parentid   uid
10001      10001
10001      10002
10001      10003
10002      10004
10004      10005
10003      10006
10005      10007

我需要在这个单表中的行之间建立父子关系。

我需要以相反的顺序让父级直到 4 个级别。例如,最后一条记录是uid 10007,其parentid 是 10005。现在uid 10005的父级是1000410004的父级是1000210002的父级是10001

我正在使用 MySQL,所以递归似乎是不可能的。我有哪些选择以及如何解决这个多层次的问题。我使用 PHP/MySQL。

提前谢谢各位。

4

1 回答 1

2

由于您有有限的 4 个级别,因此您不需要递归(尽管能够使用例如 MS SQL CTE 会很方便)。

就像是:

SELECT
  t4.uid as child, 
  --t3.uid as parent,
  --t2.uid as grand_parent,
  --t1.uid as great_grand_parent,
  t1.parentid as great_great_grand_parent
FROM
  your_table_name t1

  inner join your_table_name t2
  on t2.parentid = t1.uid

  inner join your_table_name t3
  on t3.parentid = t2.uid

  inner join your_table_name t4
  on t4.parentid = t3.uin

where 
  t4.uid = '10007' -- your start node.

如果您需要对多个节点执行此操作,则需要将其加入到选择起始节点的内容中,或者例如将上述WHERE t4.uid = '10007'子句替换为WHERE t4.uid IN (SELECT DISTINCT uid FROM your_table_name)

这是徒手完成的,因此对错别字表示歉意。

于 2013-03-21T08:55:56.623 回答