我有一个看起来像这样的表:
id parent_id name
1 0 page #1
2 1 Page #2
3 1 Page #3
4 2 Page #4
* parent_id *被重新定义为id。
第4页是第2页的孩子 和页面#2是页面#1的孩子 第3页也是如此。
我需要一个可以让所有孩子都参与的mysql查询,比如id 1。 这将返回所有这些页面,因为所有页面“master parent”(lol)都是页面#1。
答案 0 :(得分:1)
您基本上有两个选择:
在您的应用程序逻辑或查询中使用递归,如果您的RDBMS支持
存储树中每个节点的左/右值,可以轻松找到节点的所有子树
这两个选项都包含在sitepoint的一篇优秀文章http://www.sitepoint.com/hierarchical-data-database/中(但它不包括RDBMS递归,你可能不支持它)
答案 1 :(得分:0)
以为我只是为这个问题留下了解决方案。不只是在mysql中,而是使用php。
这是一个自我调用的函数,用于检查当前页面(在循环中)是否有子项。 它将返回一个包含所有子节点(包括父节点)id的数组。
public function getPageChildren($parent_id) {
$result = mysqli_query($con, 'SELECT id FROM pages WHERE parent_id = '.$parent_id);
while($children = mysqli_fetch_assoc($result)) {
if($children) {
$childrenArray[] = $children['id'];
$childrensChildren = getPageChildren($children['id']);
foreach($childrensChildren as $childrensChild) {
$childrenArray[] = $childrensChild;
}
}
}
return $childrenArray;
}