2016-09-20 5 views
7

私は2つのテーブルをtogeatherに結合したいと考えています。Codeigniter:同じ名前とIDの列との連携ができません

どのようにこれまで私は私のフォーラムのテーブルが、私は両方の名前を表示することはできませんよcolumn "name"と私のforum_categoriescolumn "name"

を持っているので。私は両方の名前が列と 表の両方から表示するように取得することができますどのように私の選択で

()私は$this->db->select('f.name, fc.name', false);のように使用している場合、それが唯一forum_categories

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

から名前を表示するには、質問。

注:私は私のforeachループで$result['name']を使用できるようにしたいです。

だから、出て、私は

CodeIgniter ActiveRecord field names in JOIN statement

codeigniter - select from 2 tables with same column name

見てきました、それは

General 

News & Discussion 

Lounge 

になりたい置きますモデル

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

更新

次のコードでうまく動作ではなく、単に参加の一つのロット()

を使用します
+0

)(あなただけの 'エコーます$ this-> DB-> last_queryすることができます;'クエリの実行後に、それはFC、f.nameをSELECT '@Zeeshan – Zeeshan

+0

を与えるかを見るためにphpmyadminのに直接それを実行してみてください。 FROM 'forum'を' f'としてJOIN 'forum_categories'を' fc'として 'fc'.forfor_categories_id' =' f'にします。'forum_id'' – user4419336

+0

' phpmyadmin'で実行しようとしました – Zeeshan

答えて

3

あなたの更新された質問に記載されています。必要なのはUNIONで、JOINではありません。 get_compiled_select()を使用して、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

コントローラ上の配列にエラーが表示されましたメッセージ:未定義インデックス:name – user4419336

+0

selectでfc.nameを使用すると、forum_categoriesの名前のみ表示されます – user4419336

+0

"名前"という単語を使用して両方の単語を取得する – user4419336

関連する問題