我有一个名为menu的表格,列(sequence, page_seq, name, parent_id)
sequence
和page_seq
无关紧要
parent_id
空白的行是顶部菜单项,然后parent_id
不为空的行是子菜单项
所以,假设有一行名称为Top Item
,parent_id
为空白,序列为1,另一行名为Sub 1
且parent_id
为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>
但它显示的是顶级菜单项,每个子菜单项位于每个子菜单项下方。
我是如何实现这一目标的?
答案 0 :(得分:1)
确保在$ sql2期间您选择所有子项,其中父项是您当前所在的顶级菜单项的序列(= id)?:
$sql2= 'SELECT * from menu where parent_id = "'.$result['sequence'].'"';
答案 1 :(得分:0)
您的第一个查询设置循环并获取父级。对于每个循环,您需要另一个循环来显示该父级的所有子级 您需要在第二个循环中定义哪个父级当前在第一个循环中播放,以了解要显示的子级:
$sql2="SELECT * from menu where parent_id != '' AND name = $result['XX']"
其中$result['XX']
是来自第一个循环的当前父级,并且是父级子级的任何链接,但是我不知道您使用什么来确定哪些父级链接到哪些子级 - 名称?
<强>建议/信息强> 你没有检查(也许你这样做,而不是简单的例子)。如果任何一个查询什么都没找到会怎或者,如果第一个循环找到父级,第二个循环找不到子级? 你需要检查一下,确保你有数据,结果等,否则你可能会得到空白的菜单项,或者更糟。
看起来你可以通过两个表来改善这一点,一个用于所有父母,一个用于所有孩子。使用childs表中使用的父表的一些唯一引用作为父项和子项之间的链接 因此,您可以更新并选择给定父级的某些子级,或者查找给定子级的父级等。
或者至少如果您仍然使用一个表,则通过使用确定它们的列来严格定义父项和子项。即type = parent,type = child。这将消除您根据没有角色确定某个角色的可能问题(即parent_id = empty)。
与往常一样,没有必要更符合您的确切要求,这就是为什么它是一个建议/信息:))