我有一组按层次结构组织的数据,应该可以增长到任意大小。我需要检索整个树,但是我无法弄清楚如何仅使用SQL来完成。我当前的解决方案是创建一个临时表,并使用递归函数依次查询树的分支,然后将结果存储在临时表中,随后我再次对其进行查询以产生所需的结果。
我的问题是,从本质上讲,我正在执行的联接正确吗?构造一个中间表,然后查询结果。似乎应该有一种使用联接的方法,但是MySQL文档仅涵盖检索有限深度的树的一部分。有没有办法做到这一点?我正在用PHP做到这一点。
MySQL不支持递归查询。
我建议您看一下比尔·卡文(Bill Karwin)的演讲,他在演讲中比较了存储分层数据的四种不同模型,并探讨了它们的优缺点:
幻灯片48显示了每种模型的某些类型查询的相对难度。从您的问题看来,您似乎对“查询子树”最感兴趣,对于它来说,邻接表(当前使用的模型)在这四个表中表现最差。
另外,如果您只想选择整个树(如表中的所有数据一样),则可以使用简单查询 SELECT * FROM yourtable并在客户端中重建树结构。
SELECT * FROM yourtable