【问题标题】:Codeigniter: unable to get the fields value using joinCodeigniter:无法使用连接获取字段值
【发布时间】:2013-03-31 14:16:53
【问题描述】:

我有第三张表的外键 ID,例如(有 thirdsubmenu_idthirdsubmenu 表)。我想从我的父表 mainmenu 中获取 menu_name 名称。 请参阅下面我的数据库表结构了解完整的详细信息

数据库结构

 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

【问题讨论】:

    标签: php mysql codeigniter join


    【解决方案1】:

    您创建父子关系的方法不正确。 考虑有 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');   
    }
    

    【讨论】:

    • 我试过你的代码。但是得到错误Not unique table/alias: 'thirdsubmenu'....
    • 编辑了 where 子句。再次检查。
    • 抱歉,编辑后仍然报错:syntax error在此行附近->where('thirdsubmenu.thirdsubmenu_id = "' . $thirdsubmenu_id . '"'));
    • 已解决,这里多了一个括号"'));。在我创建了所有代码之后,我知道我的表结构不好。虽然这是小应用程序,所以我只需要 4 个子菜单。但是下次我会按照你的建议做。谢谢
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多