Php 如何为mlm项目创建合适的递归函数
我有各种各样的解决方案从SO创建我的第一个传销项目,但现在我陷入了总下行数通过递归函数,因为我不知道这一点,请任何人帮助我 我的数据库表结构如下表名成员: `成员id |成员名称|节点左|节点右 成员关系如下:Php 如何为mlm项目创建合适的递归函数,php,recursion,Php,Recursion,我有各种各样的解决方案从SO创建我的第一个传销项目,但现在我陷入了总下行数通过递归函数,因为我不知道这一点,请任何人帮助我 我的数据库表结构如下表名成员: `成员id |成员名称|节点左|节点右 成员关系如下: member_id (Id 101) /\ / \ node_left(Id 102) node_right(Id 103) /\ /\
member_id (Id 101)
/\
/ \
node_left(Id 102) node_right(Id 103)
/\ /\
/ \ blank / \blank
(again) blank node_right (104)
。。。。。。等等以上只是一个例子
`
现在我需要计算所有成员的下线总数。例如:假设上面的例子,我想知道成员_id 101的总下线
如何创建以有限循环结束的递归函数
请告诉我任何想法。我不确定您是否尝试在此处实现,但实现看起来不正确 对于嵌套集,表示树结构的左/右值如下所示:
member 101 (root): left=1, right=8
member 102: left=2, right=5
member 103: left=3, right=4
member 104: left=6, right=7
然后,计算成员101的子女数将非常简单:
SELECT COUNT(*) FROM member WHERE node_left > 1 AND node_right < 8
您可以从下面的代码中使用/创建您自己的定制功能,只需检查它并尝试针对您的情况实施即可
function Recursive_getsubcategory($parent_id,$cat_group,$intLevel)
{
global $intLevel;
$sql = "select *,".$intLevel." as level from tbl_name where parent_id = '".$parent_id."' ";
$result = mysql_query($sql);
$cat_name = $result->fetch_array_multiple();
if(count($cat_name) > 0)
{
for($k=0;$k<count($cat_name);$k++)
{
$cat_group[] = array('id'=>$cat_name[$k]['sub_id'],
'parent_id'=>$cat_name[$k]['parent_id'],
'level' => $cat_name[$k]['level']
);
$parent_id[] = $cat_name[$k]['parent_id'];
//Function For Recursive Get Sub Category...
Recursive_getsubcategory($cat_name[$k]['ebay_sub_id'],$cat_group,$intLevel++);
}
}
// count of total downline nodes
return count($cat_group);
}
此代码可能对您的任务有帮助。所示的表结构基本上是邻接列表设计,不适合处理SQL中的分层数据。有关更好的替代方案,请参阅。@outis:它似乎是一个嵌套集设计,而不是邻接列表。@Rijk:每个节点向其两个子节点存储一条边,与用于邻接的标准模式相反,但邻接,而不是子树的边界。注意,对于根,你有101,“…”,102,103;104不在范围内,尽管它是后代。@outis:你似乎是对的。。我已经添加了一个解释嵌套集模型的答案。mysql扩展正在被弃用,不应该用于新代码。应该使用准备好的语句,而不是将变量直接插入语句中,因为它们在重复查询时更安全、更快。不要使用;仅选择所需的列。代码中的不可读$intLevel不应声明为全局;它只能作为参数传递。无需将$intLevel添加到SELECT。mysql\u查询返回一个资源,而不是一个对象,并且没有fetch\u array\u multiple方法。在循环中增加$intLevel意味着后续的同级将依次记录在较低的级别;另一方面,一个数组。循环体执行两个不必要的任务:不需要记录每个父ID,特别是在调用函数时它们都是相同的;不需要记录$cat_组中的每个项目,因为您只需要大小。