Mysql 从同一查询的结果中选择
我有一张桌子看起来像这样:Mysql 从同一查询的结果中选择,mysql,Mysql,我有一张桌子看起来像这样: id parent_id name 1 0 page #1 2 1 Page #2 3 1 Page #3 4 2 Page #4 *父项id*重设为id 第4页是第2页的子页 第2页是第1页的子页 第三页也是如此 我需要一个mysql查询,可以让所有的孩子,比如说id 1。 这将返回所有这些页面,因为所有页面主控父lol都是第1页。您基本上有两个选项:
id parent_id name
1 0 page #1
2 1 Page #2
3 1 Page #3
4 2 Page #4
*父项id*重设为id
第4页是第2页的子页
第2页是第1页的子页
第三页也是如此
我需要一个mysql查询,可以让所有的孩子,比如说id 1。
这将返回所有这些页面,因为所有页面主控父lol都是第1页。您基本上有两个选项: 如果RDBMS支持递归,则在应用程序逻辑或查询中使用递归 为树中的每个节点存储左/右值,这样可以轻松找到节点的所有子树
sitepoint上的一篇优秀文章介绍了这两个选项,但没有介绍RDBMS递归,您的RDBMS递归可能无论如何都不支持。不仅仅是mysql,还有php 这是一个调用self的函数,用于检查循环中的当前页面是否有子页面。 它将返回一个包含所有子项(包括父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;
}