我是新来建立数据库,我试图做一个JOIN的基础上有三个数据库表。Codeigniter中的多重连接
Table A = ID, Name, etc
Table B = ID, Name, etc
Table C = ID, TableAId, TableBId
我无法弄清楚使用活动记录如何进行此选择。我试图尽可能少地提出请求,但是我很难理解如何在不进行三次单独调用的情况下编写它们。
我是新来建立数据库,我试图做一个JOIN的基础上有三个数据库表。Codeigniter中的多重连接
Table A = ID, Name, etc
Table B = ID, Name, etc
Table C = ID, TableAId, TableBId
我无法弄清楚使用活动记录如何进行此选择。我试图尽可能少地提出请求,但是我很难理解如何在不进行三次单独调用的情况下编写它们。
$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,测试它,然后转换为活动记录风格的误差最小化。
$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
如果你想有一个灵活的查询,你可以使用:
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'];
}
$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
使用查询命令是让出了问题的只是一个快速的方法,这并没有解决为他做什么。此外还有潜在的安全风险,因为个人数据不会被CI泄漏。 – 2011-02-07 00:58:47