Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 2.1-MySQL连接_Php_Mysql_Codeigniter_Codeigniter 2 - Fatal编程技术网

Php Codeigniter 2.1-MySQL连接

Php Codeigniter 2.1-MySQL连接,php,mysql,codeigniter,codeigniter-2,Php,Mysql,Codeigniter,Codeigniter 2,我有两张桌子: MENU ->id_menu ->title ->page_id ->order PAGES ->id_page ->title ->page ->slug 这是选择功能: public function get_all_menu() { return $this->db ->select('menu.*, pages.id_page, pages.title AS page_

我有两张桌子:

MENU
->id_menu
->title
->page_id
->order

PAGES
->id_page
->title
->page
->slug
这是选择功能:

public function get_all_menu()
    {
        return $this->db
        ->select('menu.*, pages.id_page, pages.title AS page_title')
        ->from($this->table)
        ->join('pages','id_page = page_id')
        ->order_by($this->order_by)
        ->get()
        ->result_array();
    }

这是我的问题-菜单中的项目可以连接到页面,但也可以是单独的(不连接到页面)。这意味着菜单中的页面id可以为0。如果page\u id为0,则我不会从上面的查询中获取该行。如何获取菜单中的所有项目(已连接的项目和未连接到页面的项目)?

您需要在
->join()中添加
连接类型

public function get_all_menu()
 {
    return $this->db
    ->select('menu.*, pages.id_page, pages.title AS page_title')
    ->from($this->table)
    ->join('pages','id_page = page_id','left')
    ->order_by($this->order_by)
    ->get()
    ->result_array();
}

请参阅参考手册

您需要在
->join()中添加
连接类型

public function get_all_menu()
 {
    return $this->db
    ->select('menu.*, pages.id_page, pages.title AS page_title')
    ->from($this->table)
    ->join('pages','id_page = page_id','left')
    ->order_by($this->order_by)
    ->get()
    ->result_array();
}

请参阅控制器的参考手册,在模型中调用此方法,并说您的模型名为“通用”\u模型

这里$where_condition是一个where条件,如果您想删除它,您可以从函数中删除它。最后两个参数是orderby

只需在模型中使用此函数即可加入

public function get_joins($table,$value,$joins,$where,$order_by,$order)
    {
        $this->db->select($value);
         if (is_array($joins) && count($joins) > 0)
          {
             foreach($joins as $k => $v)
               {
                $this->db->join($v['table'], $v['condition'], $v['jointype']);
               }
          }
         $this->db->order_by($order_by,$order);
         $this->db->where($where);
        return $this->db->get($table);
     }

从您的控制器在模型中调用此方法,说您的模型名为通用\u模型

这里$where_condition是一个where条件,如果您想删除它,您可以从函数中删除它。最后两个参数是orderby

只需在模型中使用此函数即可加入

public function get_joins($table,$value,$joins,$where,$order_by,$order)
    {
        $this->db->select($value);
         if (is_array($joins) && count($joins) > 0)
          {
             foreach($joins as $k => $v)
               {
                $this->db->join($v['table'], $v['condition'], $v['jointype']);
               }
          }
         $this->db->order_by($order_by,$order);
         $this->db->where($where);
        return $this->db->get($table);
     }

根据评论要求:

您需要使用“左联接”从表中检索部分或不完整的值

在本例中,常规联接将查找两个表之间的匹配项。由于其中一个表中没有id 0,因此无法检索匹配项,也不会选择该行


如果未检索到匹配项,则使用左连接(或右连接,如果合适,则根据其中一个是“不完整”表),结果还将包含不匹配的行,另一个表的值中的所有空值根据注释的要求进行设置:

您需要使用“左联接”从表中检索部分或不完整的值

在本例中,常规联接将查找两个表之间的匹配项。由于其中一个表中没有id 0,因此无法检索匹配项,也不会选择该行


如果未检索到匹配项,则使用左连接(或右连接(如果合适,则基于其中一个是“不完整”表),结果还将包含不匹配的行,另一个表的值中包含所有空值

使用自定义查询
左外部连接
@STTLCU It-is-working:)。若你们能写下答案,我就可以给你们投票:)。完成了,@Sasha。有比我更好的答案,尽管如此。使用带有
左外部联接的自定义查询
@STTLCU它正在工作:)。若你们能写下答案,我就可以给你们投票:)。完成了,@Sasha。有比我更好的答案,tho。谢谢你帮助我和解释问题:)谢谢你帮助我和解释问题:)