Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Codeigniter、MysQL中使用带连接的嵌套查询_Php_Mysql_Codeigniter_Join_Nested - Fatal编程技术网

Php 在Codeigniter、MysQL中使用带连接的嵌套查询

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.. ----------------------

我的codeigniter项目中有两个db表。简而言之

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">&nbsp;»&nbsp;Name 1.1</option>
<option value="id_page">&nbsp;&nbsp;&nbsp;-&nbsp;Name 1.1.1</option>
<option value="id_page">&nbsp;»&nbsp;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.= ' &nbsp;';
    $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, ... ]
      ]
    ]
  ]
]