现在有一个问题,我们通常使用这种技术来维护父子关系,即我们将所有实体存储在一个带有parent_id列的表中,并且所有最顶层的父母在 parent_id 列中都有0这是我同意的一种很好的标准化技术,但是也有一个缺点,速度慢,效率低。这主要是由递归引起的,例如对于每个父级,我们必须一次又一次地运行查询以生成树
SELECT id FROM `table` WHERE parent_id=something
我已经查看了一些解决方案,有些人可能会尝试通过一次又一次地运行查询来使用任何编程语言来做到这一点,这会在服务器上产生负载,有些人提供了存储过程,但也涉及递归。
所以我的问题是我们可以用一个数据库查询树(连接或子查询)来做到这一点吗?
如果我们知道深度还是不知道深度?
如果可能的话,我们如何才能获得任何孩子的最高父母(即 parent_id=0)?
如果不可能,那么为什么这种技术如此有名,而它有缺陷,或者我们有另一种解决方案?
我已经添加了 sql fiddle,但它只有架构