Я использую codeigniter framework для разработки одного музыкального cms. У меня есть 3 таблицы в базе данных mysql, в настоящее время я работаю в таблице «Album» и «Model, Controller». Я хочу ВЫБРАТЬ «Album» Table 1 и JOIN «Album» -> «cat_id» с «Category» -> «cat_id» и получить все записи категорий.
Затем я хочу ПРИСОЕДИНЯТЬСЯ «Альбом» -> «album_id» в «Саундтрек» -> «album_id», затем забрать все записи саундтреков от A до Z.
Пожалуйста, помогите мне показать правильный запрос codeigniter, как я могу подобрать и добавить таблицы, а затем извлечь записи из 3 таблиц?
Таблица 1 -> Категория
cat_id
cat_name
Дата
Таблица 2 -> Альбом
album_id
ALBUM_TITLE
album_details
Таблица 3 -> Саундтрек
album_id
track_title
Использовать этот код в модели
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; } }
попробуй это
В вашей модели
Если вы хотите получить все данные об альбомах
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 (); }
если вы хотите использовать данные конкретного альбома
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 (); }
Попробуйте это для данных …
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 (); }
в то время как для datum попробуйте это …
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(); }
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(); }