繁体   English   中英

Codeigniter和JOIN查询出现问题

[英]Trouble with Codeigniter and JOIN query

我要做的就是查询数据库表以获取我所在州的县列表。 我想拉5个与这些县相对应的城市,并在页面上列出。 我正在使用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" 
} 
}

看起来不错,但是例如,array [2]应该列出更多的城市,而不是“ Livonia”。 我似乎无法弄清楚该如何完成? 有人有任何建议或帮助吗?

您正在同时从城市和国家/地区表中打印结果。 请参阅选择表格行。 由于国家/地区表只有一排带有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();
}

现在,在视图页面中 ,每个都使用double,如下所示。

<?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
          }
        }
     }?>

我知道了。 我最终摆脱了JOIN,因为它给我的数组是县与市的比例为1:1。 我需要结合起来。 所以我查询县表并遍历整个表。 当我循环浏览时,我确实循环浏览了城市数据,并检查了城市表中的country_id是否与县表中的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>";
        }
    }
}
?>

在这里,我可以设置样式并在页面上进行组织。 非常感谢大家的帮助。 我希望这可以帮助其他人解决我的问题。 另外,如果有人有更有效的方式来做到这一点,我也会很高兴听到它!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM