2014-01-31 66 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(); 
}