2013-03-31 16 views
0

我有第三个表的外键标识,例如(具有的thirdsubmenu表)。我想从我父母的表mainmenu获得menu_name的名字。 请参考下面我的数据库表结构完整的细节Codeigniter:无法使用连接获取字段值

数据库结构

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

我想从我的mainmenu表中获取menu_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 

回答

0

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

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

现在关于你的问题,问题是要加入thirdsubmenumainmenu,然后你指的submenu`.`mainmenu_id这是从submenu 列这就是为什么你看到的错误。

试试这个代码:

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'); 
} 
+0

我想你的代码。但得到错误'不是唯一的表/别名:“thirdsubmenu” ......' –

+0

编辑where子句。再检查一遍。 –

+0

对不起,编辑后,仍然有错误:'语法错误'在这一行附近' - > where('thirdsubmenu.thirdsubmenu_id =''。$ thirdsubmenu_id。''''));' –