2011-11-21 62 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(); 
}