始终在父页面和子页面上显示子页面PHP MySQL

时间:2013-06-22 13:47:04

标签: php mysql

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

使用$ _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 />';
    }
}

1 个答案:

答案 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 />';
    }
}

作为旁注,如果不是绝对必要的话,或许不给出儿童类别的任何链接是有意义的吗?

希望以上有所帮助!