Php 在Codeigniter、MysQL中使用带连接的嵌套查询
我的codeigniter项目中有两个db表。简而言之Php 在Codeigniter、MysQL中使用带连接的嵌套查询,php,mysql,codeigniter,join,nested,Php,Mysql,Codeigniter,Join,Nested,我的codeigniter项目中有两个db表。简而言之 page page_lang ------------------------------------- ---------------------------- id_page | id_menu | id_parent | level id_page | title | etc.. ----------------------
page page_lang
------------------------------------- ----------------------------
id_page | id_menu | id_parent | level id_page | title | etc..
------------------------------------- ----------------------------
1 | 1 | 0 | 0 1 | Name 1 | etc..
2 | 1 | 1 | 1 2 | Name 1.1 | etc..
3 | 1 | 2 | 2 3 | Name 1.1.1 | etc..
4 | 1 | 2 | 1 4 | Name 1.2 | etc.
我正在尝试创建一个下拉选择框,其中包含所有嵌套有缩进的页面,就像输出一样
<option value="id_page">Name 1</option>
<option value="id_page"> » Name 1.1</option>
<option value="id_page"> - Name 1.1.1</option>
<option value="id_page"> » Name 1.2</option>
Name 1
»名称1.1
-名称1.1.1
»名称1.2
在这种情况下,需要连接page和page_lang并创建一个递归循环,i quess
但是我在设计尽可能快的代码。谢谢您的帮助。您的递归函数将如下所示
function recursivePageOptions( $level, $nodes ) {
$set = array();
foreach ($nodes as $node) {
$nest = '';
for($x=1; $x<=$level; $x++)
$nest.= ' ';
$page = '<option value="'.$node['page']['id'].'">';
$page.= $nest . $node['page']['title'] . '</option>';
$set[] = $page;
if (isset($node['children'])) {
$set = array_merge(
$set,
recursivePageOptions( $level+1, $node['children'] );
);
}
}
return $set;
}
函数递归页面选项($level,$nodes){
$set=array();
foreach($node作为$node){
$nest='';
对于($x=1;$x)[
“页面”=>[“我的主页”,24,…],
“儿童”=>[
“级别1页面”=>[
“页面”=>[“一级页面”,39,…],
“儿童”=>[
“二级页面”=>[
“页面”=[“二级页面”,51,…]
]
]
],
“另一个级别1页面”=<[
“页面”=>[“另一个一级页面”,56,…]
]
]
]
]
这一部分的细节取决于您自己,基本上,您将从数据库中获取行,并以这样一种方式循环它们,以生成类似于上面所述的数组结构。是的,您需要一个递归函数。将页面从数据库中取出,按父级升序排序,然后您可以运行一个深度优先算法h跟踪深度,并在页面名称前加上深度级别的缩进。策略说明,谢谢,但我不太习惯于构建递归。这是php方面,非常有用。今天是第四天,我仍在试图找到一种有效的方法,通过一个sql查询来获取您的above提到了数组。最后,我找到了处理数据的方法,最终结果与孩子们在一起。谢谢。
[
'My Homepage' => [
'page' => ['My Homepage', 24, ... ],
'children' => [
'Level 1 Page' => [
'page' => ['Level 1 Page', 39, ... ],
'children' => [
'Level 2 Page' => [
'page' = ['Level 2 Page', 51, ... ]
]
]
],
'Another Level 1 Page' =< [
'page' => ['Another Level 1 Page', 56, ... ]
]
]
]
]