Php Codeigniter和联接查询出现问题

Php Codeigniter和联接查询出现问题,php,mysql,codeigniter,foreign-key-relationship,Php,Mysql,Codeigniter,Foreign Key Relationship,我所要做的就是在数据库表中查询我所在州的县列表。我想拉5个城市,对应于这些县,并在页面上列出它们。我使用连接来实现这一点,因为这正是我的搜索让我相信我需要的 到目前为止,我正在将所有信息从模型传递到控制器,然后在视图中显示,没有任何问题。问题是,城市列表似乎将其自身限制为每个县只有一个城市。你认为我的询问有问题吗?我似乎什么都试过了,但因为我太新了,我确信我错过了一些愚蠢的东西 <? class Index_model extends CI_Model { function _

我所要做的就是在数据库表中查询我所在州的县列表。我想拉5个城市,对应于这些县,并在页面上列出它们。我使用连接来实现这一点,因为这正是我的搜索让我相信我需要的

到目前为止,我正在将所有信息从模型传递到控制器,然后在视图中显示,没有任何问题。问题是,城市列表似乎将其自身限制为每个县只有一个城市。你认为我的询问有问题吗?我似乎什么都试过了,但因为我太新了,我确信我错过了一些愚蠢的东西

<? 
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[2]下应该有更多的城市,而不是利沃尼亚。我似乎不知道如何完成这个?有人有什么建议或帮助吗?

您正在打印城市和国家表的结果。请参见选择表格行。 由于country表只有一行带有county_id,因此它将只打印一行。 控制器功能

现在在查看页面中,对每个页面使用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
          }
        }
     }?>

我明白了。我最终摆脱了连接,因为它给我的数组是县与市的1:1比例。我需要把它结合起来。所以我查询了Countries表并循环了一遍。在循环过程中,我确实循环了cities数据,并检查cities表中的county_id是否与Countries表中的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');
视图:


从这里,我可以在页面上对其进行样式设置和组织。非常感谢大家的帮助。我希望这能帮助别人解决我的问题。如果有人有更有效的方法,我很乐意听到

试试$this->db->joincountries,countries.country\u id=cities.country\u id@Mudshark似乎并没有改变任何东西,它可以让您的问题非常清楚地知道您希望视图输出是什么样子。你下面的评论仍然不清楚。这应该是你的问题。列出县和市的名单是模糊的。循环是代码所做的,而不是输出的样子。不要说这个查询应该返回什么。它确实返回了它应该返回的东西;你应该纠正你的期望。您可能需要county_id、county_name、city_id、city_name数组,或者对上面的查询进行排序。准确描述您想要的视图输出。@philipxy,您完全正确,我道歉。我真的让它工作了。我太新了,无法提供我的答案,但我会发布我所做的一切来让它工作。我将确保在将来更加具体。虽然这可以列出所有的城市,但我如何列出县和市呢?我是否使用两个不同的查询来实现这一点。我假设使用join可以执行一个查询来获得所有结果,然后循环使用它?编辑:另外,谢谢您的时间。首先让我知道以上查询中列出的城市都有吗?您是否也要打印相应的国家/地区?是的,列出了所有城市。数组包含它所属的城市id、县id和城市名称。我最终要做的是循环浏览结果并显示如下内容:countyOne-城市,城市,城市;countyTwo-城市,城市,城市;countyThree-我的视图中的城市,城市,城市。问题是我在我的模型中进行数据库查询,而不是我的控制器,因此上面的代码缺少控制器代码。这确实有效,但它正引导我朝着正确的方向前进!如果要在模型中添加函数,请将其粘贴到模型中,然后转到控制器调用模型函数。您可能知道如何调用model函数$数据[函数\结果]=$this->model->function;
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>";
        }
    }
}
?>