Codeigniter:从多个表中选择

Posted

技术标签:

【中文标题】Codeigniter:从多个表中选择【英文标题】:Codeigniter: Select from multiple tables 【发布时间】:2011-02-16 00:02:32 【问题描述】:

如何从两个或多个表中选择行?

我正在为表单设置默认字段,我需要来自两个表的值...

我当前的代码如下:

    $this->CI->db->select('*');
    $this->CI->db->from('user_profiles');
    $this->CI->db->where('user_id' , $id);
    $user = $this->CI->db->get();
    $user = $user->row_array();
    $this->CI->validation->set_default_value($user);

【问题讨论】:

【参考方案1】:

用户指南中的示例应说明这一点:

$this->db->select('*'); // <-- There is never any reason to write this line!
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');

$query = $this->db->get();

// Produces:
// SELECT * FROM blogs
// JOIN comments ON comments.id = blogs.id

查看用户指南中Active Record 页面下的全部内容。

【讨论】:

用户指南中的示例似乎没有从第二个表中生成字段。你是怎么做到的? * = 一切,来自所有可用的表。如果它没有出现,你做错了什么。此外,如果您在不同的表中有两个具有相同名称的字段,则只会显示一个。您需要执行foo as bar 才能获得-&gt;bar【参考方案2】:

只需将另一个表添加到“->from()”方法即可。比如:

 $this->db->select('t1.field, t2.field2')
          ->from('table1 AS t1, table2 AS t2')
          ->where('t1.id = t2.table1_id')
          ->where('t1.user_id', $user_id);

【讨论】:

这会产生语法错误。 不在我这边。你能详细说明一下吗? 只有php5支持该语法【参考方案3】:

我认为问题不在于连接,而在于如何显示来自两个不同表的值 - 用户指南似乎没有解释这一点。

这是我的看法:

    $this->db->select('u.*, c.company, r.description');
    $this->db->from('users u, company c, roles r');
    $this->db->where('c.id = u.id_company');
    $this->db->where('r.permissions = u.permissions');
    $query = $this->db->get();

【讨论】:

这正是我需要看到的。不确定逗号分隔的字符串或具有多个值的数组是否是正确的语法。也不确定是否在 where 方法中匹配它们。 如果需要记录集可以这样做:return $this->db->get()->result();【参考方案4】:

我认为语法不正确。 您需要选择一条记录。我有两个表,我有一个表的 id 参数传递,以及两个表的关系。

【讨论】:

【参考方案5】:

试试这个

   $this->db->select('*')
            ->from('student')
            ->where('student.roll_no',$id)
            ->join('student_details','student_details.roll_no = student.roll_no')
            ->join('course_details','course_details.roll_no = student.roll_no');
   $query = $this->db->get();
   return $query->row_array();

【讨论】:

【参考方案6】:

//从表1中选择所有字段,从表2中选择一个或多个字段......

$this->db->select('table1.*, table2.name');
    $this->db->from('table1, table2');
    $this->db->where('table2.category_id = table1.id');
    $this->db->where('table2.lang_id',$id); // your where with variable
    $query = $this->db->get();
    return $query->result();

【讨论】:

【参考方案7】:
$SqlInfo="select a.name, b.data fromtable1 a, table2 b where a.id=b.a_id";
$query = $this->db->query($SqlInfo);

试试这个方法,你可以添加第三个名为c的表,并在sql命令中添加'and'命令。

【讨论】:

我是个大菜鸟。你能再解释一下吗? 这不是运行查询的主动记录方式。 根据文档,是的,这是一种在 CodeIgniter codeigniter.com/user_guide/database/results.html 中进行 JOIN 操作的方法

以上是关于Codeigniter:从多个表中选择的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter php 和 jquery - 如何从多个表中获取数据并通过 ajax 返回

从codeigniter中的两个表中选择查询

nginx配置CI重写规则,codeigniter

codeigniter:按数据类别获取多个表中的百分比

使用 CodeIgniter 框架将数据插入到具有外键的多个表中

根据列的字符串长度从 MySQL 中选择 - CodeIgniter [重复]