0

我的代码有问题。无论您是查看父页面还是子页面,显示父页面的所有子页面的最佳方式是什么?如果选择了不同的父级,则应隐藏先前选择的父级的子页面。

所有页面在 URL 中都有一个可用的 id,可使用 $_GET['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 />';
    }
}
4

1 回答 1

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”,它应该只显示 a 的子类别并隐藏“b”和“c”的所有子类别。对?

此外,如果有人单击子类别,它仍应显示与单击父页面相同的结果。

如果我对您的要求的理解是正确的,您可以通过在子链接中传递父 ID 而不是子 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 />';
    }
}

作为旁注,如果不是绝对需要,那么在子类别上不提供任何链接也许是有意义的?

希望以上对您有所帮助!

于 2013-06-22T18:00:50.633 回答