2013-11-23 69 views
-1

好,我想在这里显示这个树状用mysql:无法获得多个SQL查询,以树形图PHP工作

http://jeroenvdv.github.io/BootstrapTreeView/

我有一个MySQL数据库,我需要从一个父名文本表,然后显示属于该parent_id的所有行。

像这样:

table = 'groups' 

|unique_id|name  |user_id | 
| 1  | example | 1  | 
| 2  | foo  | 3  | 
| 3  | bar  | 2  | 

table = 'entries' 

|unique_id| entree_name  |user_id | group_id | 
| 1  | apples   | 1  |  1 | 
| 2  | oranges   | 3  |  2 | 
| 3  | entree_example | 2  |  3 | 

基本上我需要的“组”是家长和条目是在正确的父母。

我的代码的问题是,我只得到'组'表和该表下的所有行的第一个结果。

这是我的草率代码,我仍在学习。

<?php 

$user = $_SESSION['app']['user_id']; 

    $mysqli = new mysqli("localhost", "user", "pass", "db_name"); 

$sql = "SELECT * FROM groups WHERE user_id = '$user'"; 

if(!$result = $mysqli->query($sql)){ 
    die('There was an error running the query [' . $mysqli->error . ']'); 
} 
else 
{ 


    echo '<div class="well"> 
      <ul class="list-group tree"> 
       <li class="list-group-item"><input type="checkbox" /><label class="tree-toggle tree-parent">Logged In User's Name<span class="icon-chevron-down"></span></label> 
        <ul class="list-group tree">'; 

while($row = $result->fetch_assoc()){ 
     $group = $row['id'];  
$sql = "SELECT * FROM entries WHERE group_id = '$group'"; 
?> 
<li class="list-group-item"><input type="checkbox" /><label class="tree-toggle tree-parent"><?php echo $row['name']; ?><span class="icon-chevron-down"></span></label> 
     <ul class="list-group tree">       
    <?php 
    if(!$result = $mysqli->query($sql)){ 
    die('There was an error running the query [' . $mysqli->error . ']'); 
} 
while($row = $result->fetch_assoc()){ 

echo '<li class="list-group-item"><label><input type="checkbox" />'; echo " " . $row['id']. " - " . $row['entree_name']; echo '</label></li>'; 

} 
?> 
    </ul> 
</li> 
<?php 
    } 
    } 
    ?> 
        </ul>     
       </li> 
     </ul> 
</div> 

我的问题是我只得到一个父(通过查询找到的第一个),并将该父组下的所有条目加载到树中。我知道我所做的事是错误的。但我不知道。帮帮我!

回答

1

对于嵌套的两个单独查询,您使用相同的变量名称$ result和$ row。正因为如此,你覆盖你的“组”结果变量(你仍然需要为了从“群体”的下一行处理)与你的结果从第一“项”查询这里:

<ul class="list-group tree">       
<?php 
if(!$result = $mysqli->query($sql)){ 

您指定$ result变量的新值,对'entries'的查询结果,覆盖你从'groups'中得到的结果。因此,在第一组之后,while循环条件将失败并停止。

对于$ row变量也是如此,但在这种情况下它不会导致任何问题。一般来说,我尽量不重复使用变量名,除非我确信他们不会干涉。给变量赋予更多有意义的名称,例如“$ group_result”,可以帮助保持组织结构。