Php Codeigniter:无法使用join获取字段值

Php Codeigniter:无法使用join获取字段值,php,mysql,codeigniter,join,Php,Mysql,Codeigniter,Join,我有一个第三个表的外键Id,例如(有第三个子菜单的thirdsubmenu\u Idofthirdsubmenutable)。我想从父表main menu中获取菜单名。有关完整的详细信息,请参见下面的“我的数据库表结构” 数据库结构 1)Table: mainmenu --------------- mainmenu_id PK(primary key) menu_name ..... 2)Table: submenu -------

我有一个第三个表的外键Id,例如(有第三个子菜单的
thirdsubmenu\u Id
of
thirdsubmenu
table)。我想从父表
main menu
中获取
菜单名。有关完整的详细信息,请参见下面的“我的数据库表结构”

数据库结构

 1)Table: mainmenu
    ---------------
     mainmenu_id   PK(primary key)
     menu_name     ..... 

    2)Table: submenu
    -------------------
     submenu_id     PK
     mainmenu_id    FK (foreign key refrences mainmenu table)
     submenu_name   ..... 


    3)Table: thirdsubmenu
    --------------------
      thirdsubmenu_id     PK
      submenu_id          FK (foreign key refrences submenu table)
      thirdsubmenu_name     ........
我尝试使用下面的代码从我的
main menu
表中获取
menu\u name
,但出现了错误

 //---------------------------get Main Menu Name by thirdsubmenu_id-----------------------------------
function getMainMenuNameOfSubmenu($thirdsubmenu_id)
{
    $this->load->database();   
    $this->db->select('*');
    $query=$this->db->join('mainmenu', 'mainmenu.mainmenu_id = submenu.mainmenu_id', 'left')
           ->join('submenu', 'submenu.submenu_id = thirdsubmenu.submenu_id', 'left')
           ->get_where('thirdsubmenu',array('thirdsubmenu_id'=>$thirdsubmenu_id));  

    return $query->row('menu_name');   
}
我得到的错误是:

    A Database Error Occurred

    Error Number: 1054

    Unknown column 'submenu.mainmenu_id' in 'on clause'

    SELECT * FROM (`thirdsubmenu`) LEFT JOIN `mainmenu` ON `mainmenu`.`mainmenu_id` = `submenu`.`mainmenu_id` LEFT JOIN `submenu` ON `submenu`.`submenu_id` = `thirdsubmenu`.`submenu_id` WHERE `thirdsubmenu_id` = '17'

    Filename: D:\xampp\htdocs\system\database\DB_driver.php

    Line Number: 330

您创建父子关系的方法不正确。 考虑有10, 20个或50个子菜单。你会怎么做?为其中的每一个创建一个表

您可以将所有关系保存在一个表中,只需添加一列引用每个菜单的父菜单。然后使用递归函数可以得到菜单的所有树

现在关于您的问题,问题是您正在将
thirdsubmenu
main menu
连接,然后您将引用
submenu`.`main menu id
,它是
子菜单中的一列
这就是你看到错误的原因

 //---------------------------get Main Menu Name by thirdsubmenu_id-----------------------------------
function getMainMenuNameOfSubmenu($thirdsubmenu_id)
{
    $this->load->database();   
    $this->db->select('*');
    $query=$this->db->join('mainmenu', 'mainmenu.mainmenu_id = submenu.mainmenu_id', 'left')
           ->join('submenu', 'submenu.submenu_id = thirdsubmenu.submenu_id', 'left')
           ->get_where('thirdsubmenu',array('thirdsubmenu_id'=>$thirdsubmenu_id));  

    return $query->row('menu_name');   
}
请尝试以下代码:

function getMainMenuNameOfSubmenu($thirdsubmenu_id)
{
    $this->load->database();   
    $this->db->select('*');
    $this->db->from('mainmenu');
    $this->db->join('submenu', 'mainmenu.mainmenu_id = submenu.mainmenu_id', 'left')
           ->join('thirdsubmenu', 'submenu.submenu_id = thirdsubmenu.submenu_id', 'left')
           ->where('thirdsubmenu.thirdsubmenu_id = "' . $thirdsubmenu_id . '"'); 
    $query = $this->db->get();
    return $query->row('menu_name');   
}

我尝试了你的代码。但是得到的错误
不是唯一的表/别名:'thirdsubmenu'..
编辑了where子句。再次检查。很抱歉,编辑后仍然出现错误:
语法错误
此行附近的
->其中('thirdsubmenu.thirdsubmenu_id=“'.$thirdsubmenu_id.'”)解决了,这里有一个额外的括号(
“);
。在我创建了所有代码之后,我知道我的表结构不好。虽然这是一个小应用程序,所以我只需要4个子菜单。但是下次我会按照你的建议做。谢谢