div class="one_answers">
我想显示来自table_one的数据,其中tableone_id包含在table_two中。这是一对多的关系。下面是示例。
table_one table_two
id | name id | name |tableone_id
1 | A 1 | C | 1
2 | B 2 | D | 1
3 | E | 2
4 | F | 2
我在PHP上期待的结果是..
Number | Name | Linked Item |
1 | A | C |
| | D |
2 | B | E |
| | F |
我已经尝试了一些代码,例如
**Controller.php**
$head = $this->db->query("SELECT * from table_one)->result_array();
foreach($head as $key => $value)
{
$head[$key]['items'] = $this->db->query("SELECT
a.id,
b.id,
b.name as tabletwo_name,
FROM table_one a
JOIN table_two b on a.id = b.id
where b.id =".$value['id'])->result_array();
}
我做的代码失败了,我是如何为这种情况做正确的代码的?
谢谢<</p>
- 数据库查询应位于模型中,而不是控制器中
- 您在第一个选择中缺少双引号,您的字符串未关闭
- 为什么要从table_one中选择所有结果,然后执行 JOINed 选择?您甚至没有选择要在输出中包含的数据(如 table_two.name(。
将第一个查询更改为:
$this->db->query("SELECT table_one.id as number, table_one.name as name, table_two.name as linked_item FROM table_one LEFT JOIN table_two ON table_one.id = table_two.tableone_id")->result_array();
然后就这样做:
foreach($head as $key => $value)
{
$head[$key]['items'] = $value;
}
试试这个,嗯,我还没有测试过这个,但你可以
$this->db->select('table_one.name AS t1,table_two.name AS t2');
$this->db->join('table_two', 'table_two.tableone_id=table_one.id');
$rs = $this->db->get('table_one');
$count = 1;
$data = array();
foreach ($rs->result() as $key => $value)
{
$data[] = array(
'number' => $count ++,
'name' => $value['t1'],
'linked_item' => $value['t2']
);
}
print_r($data);
控制器
用于在代码点火器中模型和视图之间进行通信。 因此,您的数据库查询应该在模型中。
根据您的查询创建一个模型,也许您可以尝试这样做:
function something(){
$qry = 'a.* , b.tableone_id';
$this->db->select($qry);
$this->db->from('table_one as a');
$this->db->join('table_two b', 'b.tableone_id = a.id', 'left');
$q = $this->db->get();
return $q;
}
也尝试点击此链接以获取有关 CI 中数据库引用的更多参考:https://www.codeigniter.com/userguide3/database/query_builder.html