2016-09-20 13 views
7

Tôi muốn có thể tham gia hai bảng togeather.Codeigniter: Tham gia không hoạt động với các cột cùng tên và id

thế nào bao giờ vì tôi tôi bảng forum column "name"forum_categories tôicolumn "name"

tôi không thể hiển thị cả hai tên.

On chọn của tôi() nếu tôi sử dụng như $this->db->select('f.name, fc.name', false); nó chỉ hiển thị tên từ forum_categories

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

Câu hỏi làm thế nào tôi có thể nhận được cả hai tên để hiển thị từ cả hai cột và bảng.

Lưu ý: Tôi chỉ muốn để có thể sử dụng $result['name'] trong vòng lặp foreach tôi.

Vì vậy, đặt ra Tôi muốn nó được

General 

News & Discussion 

Lounge 

Tôi đã nhìn

CodeIgniter ActiveRecord field names in JOIN statement

codeigniter - select from 2 tables with same column name

Mô hình

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

khiển

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

cập nhật

hoạt động tốt với mã dưới đây nhưng thà chỉ cần sử dụng một trong rất nhiều tham gia()

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

có thể bạn chỉ cần 'echo $ this-> db-> last_query(); 'sau khi thực hiện truy vấn và cố gắng thực hiện nó trực tiếp vào phpmyadmin để xem những gì nó mang lại cho – Zeeshan

+0

@Zeeshan' CHỌN f.name, fc. name FROM 'forum' là' f' JOIN 'forum_categories' là' fc' ON 'fc'.'forum_categories_id' =' f'.'forum_id'' – user4419336

+0

Bạn đã thử thực hiện nó trong' phpmyadmin' – Zeeshan

Trả lời

3

Từ những gì tôi thấy trong câu hỏi được cập nhật của bạn. Những gì bạn cần là UNION chứ không phải JOIN. Bạn có thể sử dụng get_compiled_select() để tạo cả truy vấn trước khi kết hợp với 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

Hãy thử điều này, nó sẽ hoạt động.

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

Bây giờ hiển thị lỗi trên mảng của tôi trên bộ điều khiển Message: Undefined index: name – user4419336

+0

Nếu tôi sử dụng fc.name trong select sẽ chỉ hiển thị tên từ forum_categories – user4419336

+0

Tôi chỉ muốn sử dụng từ "tên" một từ để có được cả hai – user4419336

Các vấn đề liên quan