如何使用PHP和SQL在树视图中进行排列

如何使用PHP和SQL在树视图中进行排列,php,sql,database,treeview,Php,Sql,Database,Treeview,我正在构建我的树视图。我面临一个问题,就是如何安排来自SQL查询浏览器数据库的数据,以便使用PHP将数据插入到Treeview中。当我从数据库中提取数据到我的treeview中时,它会在我的treeview中显示许多重复的数据。另一个问题是如何在树视图中更改样式?希望有人能帮我检查哪一部分出错。谢谢 下面是我的代码: <div class="row-fluid"> <!-- block --> <div class="block">

我正在构建我的树视图。我面临一个问题,就是如何安排来自SQL查询浏览器数据库的数据,以便使用PHP将数据插入到Treeview中。当我从数据库中提取数据到我的treeview中时,它会在我的treeview中显示许多重复的数据。另一个问题是如何在树视图中更改样式?希望有人能帮我检查哪一部分出错。谢谢

下面是我的代码:

<div class="row-fluid">              
<!-- block -->
<div class="block">

    <div class="block-content collapse in">
        <div class="span6"> 
            <?php
                $sql="select * from level_tree lt JOIN users u ON lt.user_id = u.id where lt.referal_id =". $user_id;
                $query=mysql_query($sql);
                if(mysql_num_rows($query)>0){
                    $select_name = 'SELECT * FROM users WHERE id = ' . $user_id;
                    $query_select = db_conn_select($select_name);
    foreach($query_select as $rs_select) {
   $name = $rs_select['name'];
   $email = $rs_select['email'];

     }
                ?>          
             <div id="jstree">
                <ul>
                    <li><?php echo $name. '('.$email.')' ?></li>

                <ul>
                <?php 

                while($rs=mysql_fetch_array($query)){
                    echo "<li>".$rs['name']."&nbsp;(".$rs['email'].")";
                    downline_list($rs['id']);
                    echo "</li>";
                }

            ?>
              </div>
             <?php 
                }else{
                    echo "No downline";
                }
                function downline_list($id){
                    $sql="select * from level_tree lt JOIN users u ON lt.user_id = u.id where lt.referal_id =".$id;
                    $query=mysql_query($sql);
                    if(mysql_num_rows($query)){
                        echo "<ul>";
                        while($rs=mysql_fetch_array($query)){               
                            echo "<li>".$rs['name']."&nbsp;(".$rs['email'].")";
                            downline_list($rs['id']);
                            echo "</li>";
                        }
                        echo "</ul>";
                    }
                }

            ?>               
        </ul></div>
        </div>
    </div>
    <!-- /block -->
  </div>

  <script src="plugins/jstree/dist/jquery-1.10.2.min.js"></script>
 <link rel="stylesheet" href="plugins/jstree/dist/themes/default/style.min.css" />
<script src="plugins/jstree/dist/jstree.min.js"></script>
<script>
$(function () {
// 6 create an instance when the DOM is ready
$('#jstree').bind("ready.jstree", function () {
    $('#jstree').jstree('open_all');
  }).jstree();

}); 
</script>
<style type="text/css">
  .jstree li > a > .jstree-icon {  display:none !important; } 
 </style>
我想从数据库中获取数据,我有2个表用户,我的数据库中的level_tree下面是我的数据库信息:

表users在我使用的这个表中的名称是developer2 account,所以树名中的前1个是selectdeveloper2,我想在我的树视图中显示这个表的列名和电子邮件数据。此tablereferal_id编号表示在哪个人名下。例如:在本表示例中,如果名称tong Referral_id为8,则名称tong upline为Ooi Thong Bee,因为名称Ooi Thong Bee id为8。referal_id是从id获取的:

表级别树在该表中,referal\u id=3表示在我的帐户名developer2下,因为在表users中,namedeveloper2的id=3。列级别表示查看用户id的级别:

输出如下图所示:

实际上,我希望treeview中的输出数据排列和treeview样式与下图相同:


从逻辑上讲,您的level_树表是不必要的。您可以直接从用户表中推断出整个过程

特里的推荐人是Ooi Thong Bee。 Ooi Thong Bee的推荐人是开发人员2。 所以不需要另一张桌子

您的表格中存在不一致之处。在用户表中,并没有人引用Hu La La,在level_树中,它被设置为3。哪一个是好的

你应该做什么:

1将所有参考id值放入用户表中。 2去掉level_树表。 3按如下方式构建树视图显示:

决定哪个用户是树的顶部。就像你做的那样,让我们假设开发人员2。 查找developer2引用的所有用户

从用户中选择id,其中referal_id=从用户中选择id,其中name='developper2'

你会得到Ooi Thong Bee和Hong Tian Fa。显示这两个缩进时,添加1级缩进

然后得到Ooi Thong Bee的推荐用户,然后是Hong Tian Fa的推荐用户,依此类推。其思想是,当您进入树中时,您将获得所有用户的引用用户

这可以使用递归函数来完成。每次找到子函数时,请再次调用递归函数,并按调用该函数的次数增加缩进。当数据实际排列在树中时,这称为树遍历。这里是数据库表中的,但用户之间的关系定义了一个表

所有这些都意味着您必须首先修复数据,然后围绕该数据结构构建算法

就您的代码而言:

$userid在第一个查询中使用,但在显示的代码中从未设置过。 你的下线列表功能是正确的想法。只要通过你目前的等级就可以了。这样,您就知道要应用级别*4空格的缩进。再次调用下线列表之前,增加缩进。 找出代码在做什么,以及为什么这样做相当容易。在每个迭代中添加print语句并查看它在做什么。例如:用户111、222和333不应被tong提及。只有fff。因此,打印查询参数和结果以查看发生了什么。
祝你好运。

@Nic3500好的,你能编辑我的代码,使其与我的实际输出一样工作吗?谢谢。对不起,我无能为力,请阅读我的答案。我知道这不是你想要的,但是仅仅为你编码是没有帮助的。你必须明白发生了什么事。debug 101对于递归函数,在每次调用时打印参数、查询和结果,并在简化的样本数据集上进行后续操作。根据需要进行修复。警告:mysql_*扩展从PHP5.5.0开始就被弃用,从PHP7.0.0开始就被删除。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。好的,谢谢你的信息。