我想加入两张桌子。让我们说t1
和t2
。 t1
有fk t2_id
。但是当我运行代码时,我的视图中没有显示任何内容。
控制器:
//..
$data['city']= $this->state_model->name();
$this->load->view('viewt', $data);
型号:
function name(){
$this->db->select('*');
$this->db->from('state');
$this->db->join('city', 'city.state_id = state.id');
$sql = $this->db->get();
if ($sql->num_rows () >0) {
foreach($sql->result() as $row) {
$this->db->where('state_id','state.id');
$r = $this->db->get('city');
}
return $r->result();
}
else {
return null;
}
查看:
<?php foreach($city as $row):?>
<?php echo $row->cityname; ?></br></br></br>
<?php endforeach;?></br></br>
提前致谢
查询:
SELECT `id`, `statename` FROM (`state`) ORDER BY `id` ASC SELECT * FROM (`state`) JOIN `city` ON `city`.`state_id` = `state`.`id` SELECT * FROM (`city`) WHERE `state_id` = 'state.id' SELECT * FROM (`city`) WHERE `state_id` = 'state.id' SELECT * FROM (`city`) WHERE `state_id` = 'state.id'
答案 0 :(得分:1)
你的$ r变量只有最后一次迭代,因此函数只会返回最后一个结果集,所以试试这个:
if ($sql->num_rows () >0) {
foreach($sql->result() as $row) {
$this->db->where('state_id',$row->state_id);
$r[] = $this->db->get('city')->row();
}
return $r;
答案 1 :(得分:0)
检查最新查询:$this->db->last_query()
。
答案 2 :(得分:0)
好的,所以你从你的加入中得到三条记录 - 所以我们知道这是有效的。但是你的其他3个查询看起来不正确。试试这个:
if ($sql->num_rows () >0) {
$r = array();
foreach($sql->result() as $row) {
// here, you need to replace 'state.id' with the actual
// results from your join query ($row->id which is the id
// from the state table
$this->db->where('state_id',$row->id);
$r[] = $this->db->get('city')->result();
}
return $r;
}
else
{
return null;
}
所以现在你应该有一个结果数组,并且可以在你的视图中使用foreach进行迭代。
答案 3 :(得分:0)
我不太明白为什么你需要在循环中进行第二次查询。你不能这样做:
if ($sql->num_rows() > 0) {
return $sql->result();
}