[英]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.