Codeigniter与sql一对多关系合并为一行记录

时间:2017-04-21 09:08:42

标签: sql codeigniter one-to-many

我想查询一对多的关系

例如:

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框架和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 

先谢谢你们帮助我。

3 个答案:

答案 0 :(得分: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');

答案 1 :(得分: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');

答案 2 :(得分: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;
}