2017-04-21 107 views
0

我想查詢一對多的關係笨合併成一條記錄與SQL一對多的關係

如:

Table A:      Table B: 

id | country_name    id | name | table_A_id 

1 | Usa      1 | kerry | 1 

2 | Australia    2 | jerry | 1 

           3 | tommy | 2 

           4 | cherry | 2 

我的目的是查詢結果進行合併一行記錄

如:結果列表:

1 Record   2 Record 
Usa    Australia 
kerry    tommy 
jeryy    cherry 

目前,我使用Codeignter framewo rk和sql的初學者,請不要介意我傢伙。

$this->db->select('*') 
>from("table A") 
->join("table B", "table.A.id = table_A_id"); 
$query = $this->db->get(); 
if($query->num_rows() > 0) {  
    return $query->result(); 
} 

我的觀點

<?php foreach($posts as $post) { 
    echo $post->country_name; 
    echo $post->name; 
} ?> 

但是,它給了我4個記錄。

1 Record   2 Record 
Usa    Usa 
kerry    jerry 

3 Record   4 Record 
Australia   Australia 
tommy    cherry 

謝謝你們提前幫助我。

回答

0

這裏是你錯過了什麼

$this->db->select('*') 
>from("table A") 
->join("table B", "table.A.id = table_A_id"); 
$query = $this->db->get(); 
if($query->num_rows() > 0) {  
    return $query->result(); 
} 

它應該是

->join("table B", 'B.table_A_id=A.id'); 

希望這有意義

B選項

$this->db->join('table B','B.table_A_id=A.id','INNER'); 
$query = $this->db->get('table A'); 
+0

謝謝回答,但它仍然不正確。 –

+0

我已更新我的評論對不起選項B –

+0

這是從你工作結束? –

0

嘗試這個

SELECT country, group_concat(name) FROM city c INNER JOIN employee e 
ON c.id = e.city_id group by c.id 

輸出

('USA '  , 'jerry ,kerry'), 
('Australia', 'cherry ,tommy'); 
+0

我var_dump得到這些結果,但我不能通過它進入視圖循環。 –

0

我的解決方法發現不使用內部聯接:

public function mergeRecord() { 
    $array_store = array(); 
    foreach($this->one() as $row) { 
     $child = $this->many($row['id']); 
     if($child) {   
      $return = array_merge(array("parent" => $row), array("child" =>$child));    
      array_push($array_store, $return);            
     } 
    } 
    return $array_store;     
} 

public function one() { 
    $query = $this->db->select("*") 
    ->get("table A") 
    ->result_array(); 
    return $query; 
} 

public function many($id) { 
    $query = $this->db->select("id, name")   
    ->where("table_A_id", $id) 
    ->get("table B") 
    ->result_array(); 
    return $query; 
}