2014-07-24 37 views
4

我有三张桌子,我必须加入。我不是一个好的sql作家。可以请sombody帮我准备这个使用连接,使用CI加入三张桌子

分支

branch_id | branch_name | branch_address 
1   name1   address1 

branch_services

bs_id | branch_id | service_id 
1  1   1 
2  1   2 
3  1   4 

服务

service_id | service_name 
1    service1 
2    service2 
3    service3 
4    service4 

,我需要选择*从分支表和SERVICE_NAMES相关到像这样的每个分支

结果

1 | name1 | address1 | service1 service2 service4 | 

,而我搜索发现了一些通话group_concat.It作品。但如何使用它与CI?

+0

请添加您想要的结构 –

+0

@AdarshMPallickal请立即检查 – Dushan

+0

1 | name1 | address1 | service1 | 1 | name1 | address1 | service2 | 1 | name1 | address1 | service4 |你需要这个 ?? –

回答

0

我回答我的问题,从而使他人发现它有用,

$this->db->select("branches.branch_name, branches.branch_address, group_concat(services.service_name)"); 
$this->db->from("branches"); 
$this->db->join("branch_services", "branches.id = branch_services.branch_id", "left"); 
$this->db->join("services", "branch_services.service_id = services.id", "left"); 
$query = $this->db->get(); 

GROUP_CONCAT是奇迹点

0

我还没有测试,但尝试这个

SELECT branches.*, services.service_name FROM branches LEFT JOIN branch_services ON branches.branch_id = branch_services.branch_id LEFT JOIN services ON services.service_id = branch_services.service_id 
+0

这是行不通的。这将只从服务表中选择一个服务。但是可以有一个分支提供多种服务。在我的问题中添加了示例。 – Dushan

+1

我明白了,起初并不清楚。 – Axel

1
$this->db->select('*'); 
$this->db->from('branches'); 
$this->db->join('branch_services','branches.branch_id = branch_services.branch_id', 'left'); 
$this->db->join('services','branch_services.service_id = services.service_id', 'left'); 
$query = $this->db->get(); 
if($query->num_rows() != 0) 
     return $query->result_array(); 
else 
     return false; 

使用联接喜欢左,右,内根据您的需要

+0

@Dushan你检查我的答案吗? –

+0

是的。这也只给出一个服务 – Dushan

+0

列中的所有服务 –

0

试试下面的代码:

$this->db->select("branches.branch_name, branches.branch_address, services.service_name"); 
$this->db->from("branches"); 
$this->db->join("branch_services", "branches.id = branch_services.branch_id", "inner"); 
$this->db->join("services", "branch_services.service_id = services.id", "inner"); 
$query = $this->db->get(); 

$result = array(); 
if($query->num_rows() > 0) 
{ 
    $result = $query->result_array(); 
} 

echo "<pre>"; print_r($result); 


这会打印以下结果(如预期):

Array 
(
    [0] => Array 
     (
      [branch_name] => name1 
      [branch_address] => address1 
      [service_name] => service1 
     ) 

    [1] => Array 
     (
      [branch_name] => name1 
      [branch_address] => address1 
      [service_name] => service2 
     ) 

    [2] => Array 
     (
      [branch_name] => name1 
      [branch_address] => address1 
      [service_name] => service4 
     ) 

)