Найти идентификатор родителя, предоставив идентификатор спонсора рекурсивным способом, используя php и mysql - PullRequest
0 голосов
/ 07 февраля 2019

В настоящее время я пытаюсь создать двоичное дерево, и в настоящее время структура моей таблицы SQL выглядит следующим образом:

Node_ID  Parent_ID  Node_Position  SID     
-------  ---------  -------------  --------
      1          0  T                      
      2          1  L              1       
      3          1  R              1       
      4          2  L              1       
      5          2  R              1       
      6          3  L              1       
      7          3  R              1       
      8          4  L              1       
      9          4  R              1       
     10          5  L              1       
     11          5  R              1       
     12          8  L              1       

, которая создает дерево, созданное ниже, и вот ссылка на изображение .

                                1 
                             /    \
                            2       3
                           / \      / \
                          4   5     6  7
                        /\    / \   
                        8 9   10 11
                       /
                      12


Проблема в этом дереве Я получаю так далеко, когда заполняю оба потомка идентификаторов 4 и 5, и вместо получения следующего родительского идентификатора SID 1, равного 6, он получает родительский идентификатор8, который не является поведением двоичного дерева

Код php для получения родительского идентификатора нового дочернего элемента на основе идентификатора спонсора.То, что я сделал до сих пор, ниже

<code>function getNodeInsertPostionByParentId($parentId){
$position = array('status'=>false);
        $parents = array();
        foreach($parentId as $parent){              
                $qry = "select Node_ID,Node_Position from tblregister where Parent_ID =".$parent." order by Node_Position asc";
                $rst = mysql_query($qry);
                $count = mysql_num_rows($rst);
                if($count==2){
                    while($row = mysql_fetch_assoc($rst)){
                        $parents[$parent][] = $row['Node_ID'];
                    }   
                }elseif($count==1){
                    $position['status'] = true;
                    $position['parentId'] = $parent;
                    $position['node'] = 'R';
                    //echo '<pre>1';print_r($position);echo '
';вернуть $ позицию;} else {$ position ['status'] = true;$ position ['parentId'] = $ parent;$ position ['node'] = 'L';// echo '
2';print_r($position);echo '
';вернуть $ позицию;}} return searchByParents ($ parent);} function searchByParents ($ parent) {foreach ($ parent как $ parent) {return getNodeInsertPostionByParentId ($ parent);}} getNodeInsertPostionByParentId (array ('1'));

На самом деле, пока я пытаюсь получить новый идентификатор родительского ребенка на основе SID.Я не знаю что делать,,Я думаю, должен ли я проверить, есть ли на уровне все дети или нет.,или есть другой способ решить эту проблему

...