Codeigniter中的多个连接

时间:2011-02-06 22:08:10

标签: php database codeigniter join

我是新手来构建数据库,而我正在尝试基于三个数据库表进行JOIN。

Table A = ID, Name, etc
Table B = ID, Name, etc
Table C = ID, TableAId, TableBId

我无法弄清楚的是使用活动记录如何进行此选择。我试图尽可能少地提出请求,但是如果没有进行三次单独的调用,我会感到难以理解。

4 个答案:

答案 0 :(得分:33)

$this->db->select('*');
$this->db->from('TableA AS A');// I use aliasing make joins easier
$this->db->join('TableC AS C', 'A.ID = C.TableAId', 'INNER');
$this->db->join('TableB AS B', 'B.ID = C.TableBId', 'INNER');
$result = $this->db->get();

join函数的工作方式如下: join('TableName','ON condition','Type of join');

equivilent sql:

SELECT *
FROM TableA AS A
    INNER JOIN TableC AS C
    ON C.TableAId = A.ID
    INNER JOIN TableB AS B
    ON B.ID = C.ID

我发现首先编写SQL,测试它,然后转换为活动记录样式可以最大限度地减少错误。

答案 1 :(得分:5)

$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$this->db->join('authors', 'authors.id = comments.author_id');
希望你能得到我的榜样。

只需添加其他$this->db->join();

对于复杂的查询,您可能最好不要查看doctrine

等ORM

答案 2 :(得分:1)

{{1}}

答案 3 :(得分:0)

如果您想要灵活的查询,可以使用:

http://codeigniter.com/user_guide/database/results.html

使用以下语法$query = $this->db->query('SELECT * FROM my_table');

这是查询:

SELECT a.name as namea ,b.name as nameb FROM tablec c
JOIN tablea a ON a.ID = c.ID
JOIN tableb b ON b.ID = c.ID

您可能想要了解有关加入here

的更多信息

然后以这样的方式完成你的结果:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result_array() as $row)
{
   echo $row['namea'];
   echo $row['nameb'];
}