我的代码有问题。无论您是否正在查看父页面或子页面,显示父页面的所有子页面的最佳方法是什么?如果选择了不同的父级,则应隐藏先前选择的父级的子页面。
使用$ _GET ['id']提供的网址中所有网页都有可用的ID。
我的MYSQL DB看起来像这样。
CREATE TABLE IF NOT EXISTS `pages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`parent` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8;
使用我当前的代码,如果您在父页面上,则会显示子页面,但只要您跳转到任何子页面,子页面就会消失。
$gParents = mysql_query('SELECT * FROM db.pages WHERE parent = 0');
while($parents = mysql_fetch_assoc($gParents))
{
echo '<a href="?id='.$parents['id'].'">'.$parents['title'].'</a><br />';
$qChilds = mysql_query('SELECT * FROM db.pages WHERE parent = '.$parents['id'].' AND parent = '.$_GET['id']);
while($childs = mysql_fetch_assoc($qChilds))
{
echo '<a href="?id='.$childs['id'].'">'.$childs['title'].'</a><br />';
}
}
答案 0 :(得分:0)
也许我可以尝试用一个例子来理解你的问题。考虑一下,你的表有以下记录:
id title parent
1 a 0
2 b 0
3 c 0
4 a1 1
5 a2 1
6 b1 2
7 c1 3
8 c2 3
9 c3 3
您的上述代码将在第一次运行时生成这样的输出,即所有父类别及其子类别的列表:
a
a1
a2
b
b1
c
c1
c2
c3
您的要求是,如果有人点击父类别,说“a”,它应该只显示一个子类别并隐藏所有子类别“b”和“c”。正确?
此外,如果有人点击了子类别,它仍应显示与有人点击父页面时相同的结果。
如果我对您的要求的理解是正确的,您可以通过在子链接中传递parent-id而不是child-id来修复代码,如下所示:
$gParents = mysql_query('SELECT * FROM db.pages WHERE parent = 0');
while($parents = mysql_fetch_assoc($gParents))
{
echo '<a href="?id='.$parents['id'].'">'.$parents['title'].'</a><br />';
$qChilds = mysql_query('SELECT * FROM db.pages WHERE parent = '.$parents['id'].' AND parent = '.$_GET['id']);
while($childs = mysql_fetch_assoc($qChilds))
{
echo '<a href="?id='.$parents['id'].'">'.$childs['title'].'</a><br />';
}
}
作为旁注,如果不是绝对必要的话,或许不给出儿童类别的任何链接是有意义的吗?
希望以上有所帮助!