How to JOIN three tables in Codeigniter

后端 未结 6 2276
离开以前
离开以前 2020-12-03 13:55

I\'m using codeigniter framework to develop one music cms. i have 3 tables in mysql database, Currently im working in \"Album\" Table and \"Model, Controller\". i want to SE

相关标签:
6条回答
  • 2020-12-03 14:21
       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();
    }
    
    0 讨论(0)
  • 2020-12-03 14:22

    Try this one for data...

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

    while for datum try this...

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

    855788

    0 讨论(0)
  • 2020-12-03 14:23
    public function getdata(){
            $this->db->select('c.country_name as country, s.state_name as state, ct.city_name as city, t.id as id');
            $this->db->from('tblmaster t'); 
            $this->db->join('country c', 't.country=c.country_id');
            $this->db->join('state s', 't.state=s.state_id');
            $this->db->join('city ct', 't.city=ct.city_id');
            $this->db->order_by('t.id','desc');
            $query = $this->db->get();      
            return $query->result();
    }
    
    0 讨论(0)
  • 2020-12-03 14:29

    Try as follows:

    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(); 
        return $query->result_array();
    }
    

    If no result found CI returns false otherwise true

    0 讨论(0)
  • 2020-12-03 14:33

    Use this code in model

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-03 14:39

    try this

    In your model

    If u want get all album data use

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

    if u want to get specific album data use

      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 ();
     }
    
    0 讨论(0)
提交回复
热议问题