Mysql树结构统计所有活跃的孩子

时间:2014-11-03 17:38:55

标签: mysql tree children

我有这样的结构:

树: id,parent_id,lft,rght,user_id

用户: id,username,active

我想要做的是单个查询(可能带有子查询??),它将返回树中WHERE中每个顶级节点的子计数,在user表中,active设置为1.任何想法如何我能解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

因为你显然可以拥有无​​限制的'水平计数,这样的单一命令是不可能的。但你可以

1)通过具有多个SQL调用的递归算法在程序中进行计数(无论是php,java,等等)。 < - 如果可以,请这样做。

2)添加字段' cached_active_count'到Tree表并使用每个插入,更新和删除查询的触发器更新它。此选项最难设置,因为它需要多个触发器并且很容易出错,但如果您想要效率,那么这个选项可以最快地读取结果。

3)使SQL递归函数......但是MySQL并不喜欢递归,因此你需要使用由临时表组成的循环和队列进行伪递归,这不会是简单的简单代码。

4)创建将循环运行查询整个表的SQL函数,查找最底部未计算的节点并逐层计算它们。这个解决方案可能是最简单的*,但效率最低。 *(最简单!=简单)

5)但是,如果你除了"无限制"深度实际上是有限的,让我们说最深N级,你可以做出'#G; UGLY" sql select查询由N个表连接组成...