2011-11-21 63 views
0

我试图加入两个表。可以说t1t2t1fk t2_id。但是当我运行代码时,我的视图中没有显示任何内容。在codeigniter中加入两个表

控制器:

//.. 
$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

打开分析并让我们看到原始查询:$ this-> output-> enable_profiler(TRUE); – swatkins

+0

@swatkins查询上面给出 – user1052462

回答

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; 
+0

我试着用你的代码,但给错误:试图获得非对象的属性。错误显示的行是<?php foreach($ city as $ row):?> – user1052462

+1

然后只需改变它:$ r [] = $ this-> db-> get('city') - > result ();为此:$ r [] = $ this-> db-> get('city') - > row(); 看我的编辑...你必须改变它,或者稍微修改你的视图,因为你的数据现在可以通过$ row [0] - > cityname获得。我建议你编辑模型。 – Shomz

0

查询最新查询:$this->db->last_query()

+0

p.campbell:thx更正:) – uzsolt

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循环。

+0

它显示了城市现在。但另一个问题出现,那就是只有最后一个州正在展示的城市。例如我有3个州。处于状态3的城市正在展示,而不是其他。 – user1052462

+0

哦,错过了。更新了我的答案,为您提供了一系列结果。 – swatkins

0

我不明白为什么你需要内部的第二查询循环。难道你不能这样做:

if ($sql->num_rows() > 0) { 
    return $sql->result(); 
}