2

我有 mySQL 表,如:

userid left_refid right_ref_id
1             3        4
3             5        6

等等。我想通过二叉树并显示所有用户ID,以及左右参考ID。

这是我使用的代码,但它连续打印134 。

function display_childs($parent) {

    //$result = mysql_query("SELECT title FROM tree WHERE parent=".$parent.'";'); 
    global $wpdb;
    $prefix=$wpdb->prefix;
    if($parent==0){
        $parent=3;
    }
    $user_ref_1 = $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_user_reference WHERE user_id=".$parent."" ));

    foreach($user_ref_1 as $urd)
    {
        echo $urd->user_id;
        echo $urd->left_zone_id;
        echo $urd->right_zone_id;
        echo '<br>'; 
        $user_idpass=$urd->user_id;
    }

    display_childs($user_idpass); 
    unset($user_idpass);
    unset($parent);
}

display_childs(0);
4

2 回答 2

2

通常这棵树不支持递归,但您可以尝试 where 子句中的 between 运算符:select * from where left_ref_id between 3, 7 和 right_ref_id between 3,7 来拉出孩子。寻找嵌套的集合表或 celko 树。

更新:您也可以尝试and在 for 循环中递归调用 'display_childs($urd->left_zone_id) display_childs($ur->right_zone_id)`。

于 2013-07-24T11:00:37.093 回答
1

您当前的函数递归调用自身display_childs($user_idpass);,但是这将始终使用“父”ID 而不是“子”ID 调用

foreach循环中,您还应该调用display_childs($urd->left_zone_id)and display_childs($urd->right_zone_id)(并删除对 的调用display_childs($user_idpass);

于 2013-07-24T11:47:20.003 回答