Mysql树结构计算所有活动的子级



我有一个这样的结构:

树:id、parent_id、lft、rght、user_id

用户:id,用户名,活动

我要做的是一个单独的查询(可能有子查询??),它将向我返回树中每个顶部节点的子计数,在用户表中,活动节点设置为1。你知道我该怎么做吗?

由于您显然可以拥有"无限"级别计数,因此这样的单个命令是不可能的。但是你可以

1) 通过使用多个SQL调用的递归算法在程序中进行计数(无论是php、java还是其他什么)<--如果可以的话,就这样做。

2) 将字段"cached_active_count"添加到树表中,并在每次插入、更新和删除查询时使用触发器对其进行更新。这个选项最难设置,因为它需要几个触发器,而且很容易出错,但如果你想要效率,这个选项读取结果的速度最快。

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

4) 使SQL函数在整个表上循环运行查询,查找最底层的未计算节点并逐层计算。这个解决方案可能是最简单的*,但也是最低效的*

5) 然而,如果你除了"无限"深度实际上是有限的,比如说最大N级深度,你可以让"UGLY"sql select查询由N个表联接组成。。。

最新更新