【问题标题】:Join two tables in codeigniter在codeigniter中加入两个表
【发布时间】:2011-11-21 14:54:15
【问题描述】:

我正在尝试加入两个表。让我们说t1t2t1fk t2_id。但是当我运行代码时,我的视图中没有显示任何内容。

控制器:

 //..
 $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>

提前致谢

查询:

选择`id`,`statename` 来自(`状态`) ORDER BY `id` ASC 选择 * 来自(`状态`) 加入 `city` ON `city`.`state_id` = `state`.`id` 选择 * 来自(`城市`) WHERE `state_id` = 'state.id' 选择 * 来自(`城市`) WHERE `state_id` = 'state.id' 选择 * 来自(`城市`) WHERE `state_id` = 'state.id'

【问题讨论】:

  • 打开分析,让我们看看原始查询:$this->output->enable_profiler(TRUE);
  • @swatkins 查询如上所示

标签: database codeigniter join


【解决方案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;

【讨论】:

  • 我已尝试使用您的代码,但给出错误:尝试获取非对象的属性。显示错误的行是
  • 然后改一下: $r[] = $this->db->get('city')->result();对此: $r[] = $this->db->get('city')->row();请参阅我的编辑...您必须更改它,或者稍微修改您的视图,因为您的数据现在可以通过 $row[0]->cityname 获得。我建议你编辑模型。
【解决方案2】:

查看最新查询:$this-&gt;db-&gt;last_query()

【讨论】:

    【解决方案3】:

    我不太明白为什么您需要在循环中进行第二个查询。你不能这样做吗:

    if ($sql->num_rows() > 0) {
        return $sql->result();
    }
    

    ?

    【讨论】:

      【解决方案4】:

      好的,所以您从您的加入中获得了三条记录 - 所以我们知道这是有效的。但是您的其他 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 进行迭代。

      【讨论】:

      • 它显示了现在的城市。但是出现了另一个问题,即仅显示最后一个状态下的城市。例如,我有 3 个州。显示的是状态 3 下的城市,而不是其他城市。
      • 哦,错过了。更新了我的答案,为您提供了一系列结果。
      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 2018-03-14
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      相关资源
      最近更新 更多