【发布时间】:2012-09-03 00:58:29
【问题描述】:
我有一个表(例如名称是“page”),其中每一行都是另一行的子行,如下所示(参见 HTML 部分):
我想通过使用孩子的 id 找到最顶层的父母 id。例如,我们得到一个 URL 变量作为最底层孩子的 id:
http://www.website.com/page.php?p=6
然后我们将URL变量存入一个变量中:
$p = $_GET['p'];
要获得最顶层的父母的 id,我必须多次使用查询功能。例如:
if($result = $mysqli->query("SELECT * FROM page WHERE id='$p' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$parent = $row["parent"];
}
}
if($result = $mysqli->query("SELECT * FROM page WHERE id='$parent' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$parent1 = $row["parent"];
}
}
if($result = $mysqli->query("SELECT * FROM page WHERE id='$parent1' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$parent2 = $row["parent"];
}
}
if($result = $mysqli->query("SELECT * FROM page WHERE id='$parent2' LIMIT 1"))
{
while($row = $result->fetch_array())
{
$id = $row["id"];
}
}
这种方式是无效的,因为如果我得到另一个 URL 变量作为更高/更低级别的另一个孩子的 id,这将不起作用。
如何动态获取最顶层父母的id,而不考虑孩子的id?
【问题讨论】:
-
如果你还没有使用正确的nested set。
-
问题是我已经将太多数据上传到表中。我还对所有页面进行了编码,以根据父母的 id 获取数据
-
谢谢,我已经读过了,但我不明白如何实现他的方法来获取最顶层的父母的id
-
嗯,主要的一点是,使用常规相邻列表来实现这一点确实很困难,但使用嵌套集合就很简单了。请参阅stackoverflow.com/questions/3623645/… 了解如何在事后使其成为嵌套集。
标签: php mysql loops mysqli parent-child