2013-08-29 103 views
1

我有一个名为菜单与列(sequence, page_seq, name, parent_id)显示MySQL的行组合在一起

sequencepage_seq无关表

parent_id空白行都是顶级菜单项,然后行与parent_id不是空白的子菜单项

因此,可以说,有一排名称Top Itemparent_id空白,序列1和另一列名为Sub 1parent_id of 1所以当你将鼠标悬停在Top Item上时,你会将Sub 1作为子菜单项。

我想在后台管理面板中显示这些组。所以,会出现与它下面像其子链接顶部菜单项.​​..

Top Item 1 
- Sub 1 
- Sub 2 

Top Item 2 
- Sub 3 
- Sub 4 

等等...

这里是PHP我到目前为止:

<table border="0" cellpadding="5" cellspacing="5"> 
    <tr> 
     <td><strong>Name</strong></td> 
    </tr> 
    <?php 
    $sql=" SELECT * FROM menu where parent_id = '' "; 
    $rs=mysql_query($sql,$conn) or die(mysql_error()); 
    while($result=mysql_fetch_array($rs)) 
    { 
     echo '<tr> 
     <td>'.$result["name"].'</td> 
     </tr>'; 
     $sql2="SELECT * from menu where parent_id != '' "; 
     $rs2=mysql_query($sql2,$conn) or die(mysql_error()); 
     while($result2=mysql_fetch_array($rs2)) 
     { 
      echo '<tr> 
      <td><dir>'.$result2["name"].'</dir></td> 
      </tr>'; 
     } 
} 
?> 
</table> 

但它显示顶部菜单项目与每个下面的每个子菜单项目。

任何想法我可以如何实现这一目标?

回答

1

确保在$ SQL2您选择所有的孩子在家长的是,您目前在?:

$sql2= 'SELECT * from menu where parent_id = "'.$result['sequence'].'"'; 
0

确定顶部的菜单项的序列(= ID),看来你使用相同的表来存储父母和孩子。
父母由parent_id为空来定义。
孩子是由parent_id不是空白​​定义的。
我不知道孩子和父母是如何联系的。

您的第一个查询设置了一个循环并获取父项。对于每个循环,您需要另一个循环来显示该父项的所有子项。
你需要在第二循环中,其母公司目前在比赛从第一圈就知道这孩子的,以显示定义:

$sql2="SELECT * from menu where parent_id != '' AND name = $result['XX']" 

哪里$result['XX']是从第一回路的电流父母是什么链接父对于孩子,但我不知道你用什么来确定父母与哪些孩子有关 - 姓名?

建议/信息 你没有检查(也许你做,而不是简单的例子)。如果两个查询都找不到,会发生什么或者如果第一个循环找到父项,第二个循环找不到子项?
你需要检查的东西,确保你有数据,结果等,否则你可能会结束空白的菜单项,或更糟。

看起来你可以用两张桌子来改善这种情况,一张是所有的父母,一张是所有的孩子。用childs表中使用的父表的一些独特参考作为父母和孩子之间的链接。
所以,你可以更新,并选择一些孩子的对于给定的父母,或者找到一个给定的孩子家长,等

,或者至少,如果你还在用一个表,严格具有列定义的父母和孩子的那确定他们。即type = parent,type = child。这将消除可能的问题,根据它没有任何作用确定某个角色(即parent_id =空)。

与往常一样,没有必要更适合您的确切要求,并且为什么它是一个建议/信息:)