2014-01-31 68 views
16

我正在使用codeigniter框架開發一個音樂cms。我有3個表在MySQL數據庫中,目前我在「相冊」表和「模型,控制器」工作。我想選擇「專輯」表1並加入「類別」 - >「cat_id」的「相冊」 - >「cat_id」,並獲取所有類別記錄。如何在Codeigniter中加入三張表

然後我想加入「相冊」 - >「album_id」的「原聲」 - >「album_id」然後獲取所有配樂記錄A到Z

請別人幫我出示適當笨查詢,如何我可以選擇和JOIN表,然後從3個表中獲取記錄,?

表1 - >分類

  • CAT_ID

  • cat_name

  • cat_title
  • 日期

    表2 - >相冊

  • CAT_ID
  • album_id

  • ALBUM_TITLE

  • album_details

    表3 - >原聲

  • album_id

  • TRACK_TITLE

  • track_url
  • 日期
+0

看看這個鏈接http://ellislab.com/codeigniter/user-guide/database/active_record.html。在這裏您可以找到如何在Codeigniter中連接表格。 – JazyK

+0

向我們展示您已嘗試過的一些代碼 – machineaddict

回答

32

使用此代碼模型

public function funcname($id) 
{ 
    $this->db->select('*'); 
    $this->db->from('Album a'); 
    $this->db->join('Category b', 'b.cat_id=a.cat_id', 'left'); 
    $this->db->join('Soundtrack c', 'c.album_id=a.album_id', 'left'); 
    $this->db->where('c.album_id',$id); 
    $this->db->order_by('c.track_title','asc');   
    $query = $this->db->get(); 
    if($query->num_rows() != 0) 
    { 
     return $query->result_array(); 
    } 
    else 
    { 
     return false; 
    } 
} 
+1

以及我通過$ id的地方我的意思是album_id?獲得具體記錄? –

+0

請使用上面的代碼.. –

+1

重要的是,如果您有mytyable.id和mysecondtable.id並且您使用了select('*'),則第一個id字段將不會顯示。您需要手動選擇('mytable.id爲id1,mysecondtable.id爲id2,mytable。*,mysecondtable。*')... codeigniter聯接不包含表前綴,因此記錄集不會返回重複的字段。 – ssaltman

5

試試這個

在模型中

如果妳想要得到的所有專輯數據使用

function get_all_album_data() { 

    $this->db->select ('*'); 
    $this->db->from ('Album'); 
    $this->db->join ('Category', 'Category.cat_id = Album.cat_id' , 'left'); 
    $this->db->join ('Soundtrack', 'Soundtrack.album_id = Album.album_id' , 'left'); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

如果u想要得到具體的唱片數據使用

function get_album_data($album_id) { 

    $this->db->select ('*'); 
    $this->db->from ('Album'); 
    $this->db->join ('Category', 'Category.cat_id = Album.cat_id' , 'left'); 
    $this->db->join ('Soundtrack', 'Soundtrack.album_id = Album.album_id' , 'left'); 
    $this->db->where ('Album.album_id', $album_id); 
    $query = $this->db->get(); 
    return $query->result(); 
} 
3

試試這個數據...

function get_album_data() { 
    $this->db->select ('album.*,cat.*,s_track.*') 
     ->from ('albums as album'); 
     ->join ('categories cat', 'cat.cat_id = album.cat_id') 
     ->join ('soundtracks s_tracks ', 's_tracks.album_id = album.album_id'); 
    $query = $this->db->get(); 
    return $query->result(); 
} 

而基準試試這個...

function get_album_datum($album_id) { 
    $this->db->select ('album.*,cat.*,s_track.*') 
     ->from ('albums as album'); 
     ->join ('categories cat', 'cat.cat_id = album.cat_id') 
     ->join ('soundtracks s_tracks ', 's_tracks.album_id = album.album_id'); 
    $this->db->where ('album.album_id', $album_id); 
    $query = $this->db->get(); 
    return $query->row(); 
} 
0
Check bellow code it`s working fine and common model function also 
    supported more then one join and also supported multiple where condition 
order by ,limit.it`s EASY TO USE and REMOVE CODE REDUNDANCY. 

    ================================================================ 
    *Album.php 
    //put bellow code in your controller 
    ================================================================= 

    $album_id='';//album id 

    //pass join table value in bellow format 
    $join_str[0]['table'] = 'Category'; 
    $join_str[0]['join_table_id'] = 'Category.cat_id'; 
    $join_str[0]['from_table_id'] = 'Album.cat_id'; 
    $join_str[0]['join_type'] = 'left'; 

    $join_str[1]['table'] = 'Soundtrack'; 
    $join_str[1]['join_table_id'] = 'Soundtrack.album_id'; 
    $join_str[1]['from_table_id'] = 'Album.album_id'; 
    $join_str[1]['join_type'] = 'left'; 


    $selected = "Album.*,Category.cat_name,Category.cat_title,Soundtrack.track_title,Soundtrack.track_url"; 

    $albumData= $this->common->select_data_by_condition('Album', array('Soundtrack.album_id' => $album_id), $selected, '', '', '', '', $join_str); 
           //call common model function 

    if (!empty($albumData)) { 
     print_r($albumData); // print album data 
    } 

========================================================================= 
    Common.php 
    //put bellow code in your common model file 
======================================================================== 

    function select_data_by_condition($tablename, $condition_array = array(), $data = '*', $sortby = '', $orderby = '', $limit = '', $offset = '', $join_str = array()) { 
    $this->db->select($data); 
    //if join_str array is not empty then implement the join query 
    if (!empty($join_str)) { 
     foreach ($join_str as $join) { 
      if ($join['join_type'] == '') { 
       $this->db->join($join['table'], $join['join_table_id'] . '=' . $join['from_table_id']); 
      } else { 
       $this->db->join($join['table'], $join['join_table_id'] . '=' . $join['from_table_id'], $join['join_type']); 
      } 
     } 
    } 

    //condition array pass to where condition 
    $this->db->where($condition_array); 


    //Setting Limit for Paging 
    if ($limit != '' && $offset == 0) { 
     $this->db->limit($limit); 
    } else if ($limit != '' && $offset != 0) { 
     $this->db->limit($limit, $offset); 
    } 
    //order by query 
    if ($sortby != '' && $orderby != '') { 
     $this->db->order_by($sortby, $orderby); 
    } 

    $query = $this->db->get($tablename); 
    //if limit is empty then returns total count 
    if ($limit == '') { 
     $query->num_rows(); 
    } 
    //if limit is not empty then return result array 
    return $query->result_array(); 
}