2016-09-20 52 views
7

我想能够加入两个表togeather。Codeigniter:加入不与列相同的名称和编号

,因为我在我的论坛表column "name"和我forum_categories如何过column "name"

我不能够显示这两个名字。

在我的选择(),如果我使用像$this->db->select('f.name, fc.name', false);它只能从forum_categories

显示名称

array(1) { [0]=> array(1) { ["name"]=> string(17) "News & Discussion" } }

问我怎样才能得到这两个名字从两列和 表显示。

注:我只希望能在我的foreach循环使用$result['name']

所以出来把我想它是

General 

News & Discussion 

Lounge 

我已经看过

CodeIgniter ActiveRecord field names in JOIN statement

codeigniter - select from 2 tables with same column name

型号

public function get_forums() { 
    $this->db->select('f.name, fc.name', false); 
    $this->db->from('forum as f'); 

    // tried $this->db->join('forum_categories as fc', 'fc.forum_id = f.forum_id'); 

    $this->db->join('forum_categories as fc', 'fc.forum_categories_id = f.forum_id'); 
    $query = $this->db->get(); 

    if ($query->num_rows() > 0) { 
     return $query->result_array(); 
    } else { 
     return false; 
    } 
} 

控制器

<?php 

class Forums extends MY_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function index() { 

     $data['label'] = ''; 

     $data['forums'] = array(); 

     $results = $this->get_forums(); 

     var_dump($results); 

     if (isset($results)) { 
      foreach ($results as $result) { 

       $data['forums'][] = array(

        'name' => $result['name'], // Only want to use single variable. 

       ); 
      } 
     } 

     $data['header'] = Modules::run('admin/common/header/index'); 
     $data['footer'] = Modules::run('admin/common/footer/index'); 

     $this->load->view('template/forum/list_forum_view', $data); 
    } 

    public function get_forums() { 
     $this->db->select('f.name, fc.name', false); 
     $this->db->from('forum as f'); 
     $this->db->join('forum_categories as fc', 'fc.forum_categories_id = f.forum_id'); 
     $query = $this->db->get(); 

     if ($query->num_rows() > 0) { 
      return $query->result_array(); 
     } else { 
      return false; 
     } 
    } 
} 

更新

正常工作与下面代码,但宁愿只使用一个很多加盟()

public function get_forums() { 
    $this->db->select("*"); 
    $this->db->from('forum'); 
    $query = $this->db->get(); 

    foreach ($query->result_array() as $f) { 
     $data[] = array(
      'name' => $f['name'] 
     ); 

     $this->db->select("*"); 
     $this->db->from('forum_categories'); 
     $query = $this->db->get(); 

     foreach ($query->result_array() as $fc) { 
      $data[] = array(
       'name' => $fc['name'] 
      ); 
     } 

    } 

    return $data; 
} 
+0

可你只是'回声$这个 - > DB-> last_query();'查询执行后,并尝试直接执行它到phpMyAdmin,看看它给 – Zeeshan

+0

@Zeeshan'选择f.name,FC。名称从'forum'作为'f'加入'forum_categories'作为'fc' ON'fc'.'forum_categories_id' ='f'。'forum_id'' – user4419336

+0

您是否尝试过在'phpmyadmin'中执行它 – Zeeshan

回答

3

从我在您的更新问题中看到的内容。你需要的是UNION而不是JOIN。您可以使用get_compiled_select()在concat和UNION之间构建查询。

public function get_forums() { 
    $forum = $this->db->select('name')->get_compiled_select('forum'); 
    $forum_categories = $this->db->select('name')->get_compiled_select('forum_categories'); 

    $query = $this->db->query($forum.' UNION '.$forum_categories); 

    if ($query->num_rows() > 0) { 
     return $query->result_array(); 
    } else { 
     return false; 
    } 
} 
4

试试这个,它会起作用。

public function get_forums() { 
    $this->db->select('f.name as forum_name, fc.name as forum_categories_name', false); 
    $this->db->from('forum f'); 

    // tried $this->db->join('forum_categories fc', 'fc.forum_id = f.forum_id'); 

    $this->db->join('forum_categories fc', 'fc.forum_categories_id = f.forum_id'); 
    $query = $this->db->get(); 

    if ($query->num_rows() > 0) { 
     return $query->result_array(); 
    } else { 
     return false; 
    } 
} 
+0

现在在我的控制器阵列上显示错误消息:未定义索引:名称 – user4419336

+0

如果我使用fc.name中的select将仅显示来自forum_categories的名称 – user4419336

+0

我只想使用单词“名称”一个词同时得到 – user4419336

相关问题