2014-07-10 69 views
0

我所要做的就是查詢一個數據庫表,查看我所在州的縣名單。我想拉對應這些縣的5個城市,並在頁面上列出它們。我正在使用JOIN來做到這一點,因爲這是我的搜索引導我相信我需要的。Codeigniter和JOIN查詢的問題

到目前爲止,我將所有信息從我的模型傳遞到我的控制器,然後在我的視圖中顯示它並沒有任何問題。問題在於,城市名單似乎將其自身限制在每縣只有1個城市。你看到我的查詢有問題嗎?我試過(貌似)所有的東西,但是因爲我很新,所以我確信我有一些愚蠢的東西,我錯過了。

<? 
class Index_model extends CI_Model { 

    function __construct() 
    { 
     // Call the Model constructor 
     parent::__construct(); 
     $this->load->database(); 
    } 

    public function countiesWithCities() { 
     $this->db->select("*"); 
     $this->db->from("cities"); 
     $this->db->join("counties", "cities.county_id = counties.county_id"); 
     $query = $this->db->get(); 
     return $query->result(); 
    } 

} 

這是查詢的結果:

array(5) { 
[0]=> object(stdClass)#17 (5) { 
["city_id"]=> string(1) "0" 
["county_id"]=> string(1) "5" 
["city_name"]=> string(8) "Munising" 
["county_name"]=> string(5) "Alger" 
["number_of_cities"]=> string(1) "1" 
} 
[1]=> object(stdClass)#18 (5) { 
["city_id"]=> string(1) "1" 
["county_id"]=> string(1) "1" 
["city_name"]=> string(7) "Redford" 
["county_name"]=> string(5) "Wayne" 
["number_of_cities"]=> string(1) "2" 
} 
[2]=> object(stdClass)#19 (5) { 
["city_id"]=> string(1) "2" 
["county_id"]=> string(1) "1" 
["city_name"]=> string(7) "Livonia" 
["county_name"]=> string(5) "Wayne" 
["number_of_cities"]=> string(1) "2" 
} 
[3]=> object(stdClass)#20 (5) { 
["city_id"]=> string(1) "3" 
["county_id"]=> string(1) "4" 
["city_name"]=> string(6) "Monroe" 
["county_name"]=> string(6) "Monroe" 
["number_of_cities"]=> string(1) "1" 
} 
[4]=> object(stdClass)#21 (5) { 
["city_id"]=> string(1) "4" 
["county_id"]=> string(1) "2" 
["city_name"]=> string(16) "Farmington Hills" 
["county_name"]=> string(7) "Oakland" 
["number_of_cities"]=> string(1) "1" 
} 
} 

這似乎不錯,但例如數組[2]應該有其下上市更多的城市,比其他「利沃尼亞。」我似乎無法弄清楚如何完成這個?任何人有任何建議或幫助?

+0

嘗試'$ this-> db-> join(「counties」,「counties.county_id = cities.county_id」);' – Mudshark

+0

@Mudshark似乎根本沒有任何改變 – Ellenbrook

+0

編輯你的問題是非常清楚你想要的視圖輸出的樣子。您的評論如下仍不清楚。 (並應該在你的問題。)「列出縣和城市」是*模糊*。循環「是代碼做的事情,不是說輸出是什麼樣的,不要說這個查詢」應該「返回什麼,它*返回它應該返回的結果;你應該改正你的期望值(你可能想要一個數組(country_id ,縣名,(city_id,city_name)的數組)或者爲了排列上面的查詢。)*正確地描述你想要的視圖輸出。* – philipxy

回答

0

我明白了。我最終擺脫了JOIN,因爲它給我的數組是1:1的縣與城市的比例。我需要它合併。所以我查詢縣表,並通過這個表。當我循環播放時,我確實遍歷了城市數據並檢查城市表中的縣名是否與縣表中的ID相匹配。

型號:

public function countiesWithCities() { 
    $this->db->select("*"); 
    $this->db->from("counties"); 
    $this->db->where('number_of_cities >', 0); 
    $this->db->order_by("id", "asc"); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

public function getCities() { 
    $this->db->select("*"); 
    $this->db->from("cities"); 
    $this->db->order_by("county_id", "asc"); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

控制器:

$data['counties'] = $this->index_model->countiesWithCities(); 
    $data['cities'] = $this->index_model->getCities(); 


    //The page "home" does exist, so load the views in the following order 
    $this->load->view('templates/header', $data); 
    $this->load->view('templates/indexmain', $data); 
    $this->load->view('templates/footer'); 

查看:

<?php 
foreach ($counties as $county) { 

    echo "<strong>".$county->county_name."</strong> <br>"; 

    foreach($cities as $city) { 
     if($city->county_id == $county->id) { 
      echo $city->city_name."<br>"; 
     } 
    } 
} 
?> 

在這裏,我可以風格它和組織它在頁面上。非常感謝大家的幫助。我希望這可以幫助別人解決我的問題。此外,如果有人有這樣做的更有效的方式,我很樂意聽到它!

0

您正在打印來自城市和國家表格的結果。請參閱選擇表格行。 由於國家表只有一行county_id,它只會打印一行。 控制器功能

public function counties() 
{ 
    $this->db->select('*'); 
    $this->db->from('counties'); 
    $query = $this->db->get(); 
    return $query->result(); 
    } 
public function Cities() { 
    $this->db->select("cities.*"); 
    $this->db->from("cities"); 
    $this->db->join("counties", "cities.county_id = counties.county_id"); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

而現在視圖頁面使用雙每個像下面。

<?php 
    foreach ($rs_countrytable as $rs_countrytable_value) 
    { 

    echo $rs_countrytable_value->country_name; 
?><br/> 
<?php 
     foreach ($rs_Cities as $rs_Cities_value) 
     { 
     if(($rs_countrytable_value->county_id)==$rs_Cities_value->county_id)  
      { 
      echo $rs_Cities_value->city_name;?><br/><?php 
      } 
     } 
    }?> 
+0

雖然這確實能列出所有的城市,但我怎麼去列出縣和城市?我是否使用兩種不同的查詢來做到這一點。我假設與join()我可以做一個查詢來獲得所有結果,然後通過它循環?編輯:另外,到目前爲止,感謝您的時間。 – Ellenbrook

+0

首先讓我知道是否所有的城市與上述查詢列出?你還想打印相應的國家嗎? –

+0

是的,所有城市都列出。該數組包含它所屬的city_id,county_id和city_name。我最終會做的是循環顯示結果,並顯示如下內容:countyOne - 城市,城市,城市;縣兩市,市,市;在我看來,三縣 - 城市,城市,城市。 – Ellenbrook