我想查询一对多的关系
例如:
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
先谢谢你们帮助我。
答案 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;
}