2011-02-06 45 views
9

Tôi mới xây dựng cơ sở dữ liệu và tôi đang cố gắng thực hiện JOIN dựa trên ba bảng cơ sở dữ liệu.Kết nối nhiều trong Codeigniter

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

Điều tôi không thể hiểu là sử dụng hồ sơ hoạt động như thế nào để thực hiện lựa chọn này. Tôi đang cố gắng thực hiện càng ít yêu cầu càng tốt, nhưng tôi nhận được bối rối về cách tất cả nên được viết mà không cần thực hiện ba cuộc gọi riêng biệt.

Trả lời

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

Các tham gia chức năng làm việc như thế này: tham gia ('TableName', 'Về điều kiện', 'Loại tham gia');

Các 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 

tôi thấy rằng văn bản cho SQL đầu tiên, thử nghiệm nó, sau đó chuyển đổi sang phong cách kỷ lục hoạt động giảm thiểu lỗi.

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'); 

hy vọng bạn sẽ có được ví dụ của tôi.

Chỉ cần thêm một số khác $this->db->join();

Đối với các truy vấn phức tạp, bạn có thể được tốt hơn off nhìn vào một ORM như doctrine

0

nếu bạn muốn có một truy vấn linh hoạt, bạn có thể sử dụng:

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

trong đó sử dụng cú pháp sau $query = $this->db->query('SELECT * FROM my_table');

đây là truy vấn:

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 

bạn có thể muốn đọc thêm về joins here

sau đó đi qua kết quả của bạn theo cách như vậy:

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

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

sử dụng lệnh truy vấn chỉ là một cách nhanh chóng nhận ra của vấn đề, điều này không giải quyết bất cứ điều gì cho anh ta . Ngoài ra còn có những rủi ro bảo mật tiềm ẩn vì dữ liệu cá nhân sẽ không bị CI loại bỏ. –

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 
Các vấn đề liên quan