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。谢谢你帮助我和解释问题:)谢谢你帮助我和解释问题:)