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 演算子を試すことができます。ネストされたセット テーブルまたはセルコ ツリーを探します。

更新: for ループで「display_childs($urd->left_zone_id) anddisplay_childs($ur->right_zone_id)」を再帰的に呼び出すこともできます。

于 2013-07-24T11:00:37.093 に答える
1

現在の関数は自分自身を再帰的に呼び出しますがdisplay_childs($user_idpass);、これは常に「親」ID で呼び出され、「子」ID では呼び出されません

ループ内では、andforeachも呼び出す必要があります(および への呼び出しを削除します) 。display_childs($urd->left_zone_id)display_childs($urd->right_zone_id)display_childs($user_idpass);

于 2013-07-24T11:47:20.003 に答える