2011-02-06 100 views
9

我是新来建立数据库,我试图做一个JOIN的基础上有三个数据库表。Codeigniter中的多重连接

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

我无法弄清楚使用活动记录如何进行此选择。我试图尽可能少地提出请求,但是我很难理解如何在不进行三次单独调用的情况下编写它们。

回答

30
$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(); 

的加入功能的工作原理是这样的: 加入(“表名”,“ON状态”,“加入的类型” );

的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,测试它,然后转换为活动记录风格的误差最小化。

4
$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();

对于复杂的查询,你可能会更好看的ORM如doctrine

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']; 
} 
+1

使用查询命令是让出了问题的只是一个快速的方法,这并没有解决为他做什么。此外还有潜在的安全风险,因为个人数据不会被CI泄漏。 – 2011-02-07 00:58:47

0
$this->db->select('*'); 

$this->db->from('table1'); 

$this->db->join('table2','table1.id=table2.id'); 

$this->db->join('table3','table2.id=table3.id'); 

$this->db->join('table4','table3.id=table4.id'); 

$this->db->join('table5','table5.id=table4.id'); 

$this->db->where('table5.id',$this->session->userdata('id'));//getting value from session and match the id of table5 and then show data 

$data=$this->db->get()->result();//all data store in $data variable