2016-04-05 2 views
1

У меня проблема с SQL JOIN с Codeigniter 3. В базе данных есть 3 таблицы.codeigniter 3 соединить таблицы и получить одну запись

пленка стол:

id title     image  .... 
---- -------------------- ---------- 
206 The Maltese Falcon image-link .. 

Жанры стол:

genres_id genres_name 
--------- ----------- 
1   Crime 
2   Drama 

Film_genres стол:

fg_id film_id genres_id 
----- ------- --------- 
1  206  1 
2  206  2 

Мой метод модель для одного фильма

public function getFilm($id){ 
    $this->db->select() 
      ->from('film'); 
    $this->db->join('film_genres','film_genres.film_id = id','left'); 
    $this->db->join('genres','genres.genres_id = film_genres.genres_id','left'); 
    $this->db->where('id',$id); 
    $this->db->group_by('id'); 
    $query = $this->db->get(); 
    $result = $query->result_array(); 
    return $result; 

} 

Выездное кода

Array 
(
    [0] => Array 
     (
      [id] => 206 
      [title] => Malta Kartali 
      [original_title] => The Maltese Falcon 
      [year] => 1941 
      [link] => http://www.imdb.com/title/tt0033870/ 
      [rating] => 8.1 
      [directors] => 
      [writers] => 
      [stars] => 
      [musicians] => 
      [languages] => 
      [countries] => 
      [time] => 100 
      [imdb_id] => tt0033870 
      [image] => http://localhost/works/work/sipoyler.com/public/images/filmposter/tt0033870.jpg 
      [slug] => the-maltese-falcon 
      [date_added] => 2016-04-05 16:11:32 
      [fc_id] => 31 
      [film_id] => 206 
      [genres_id] => 1 
      [genres_name] => Crime 
     ) 
) 

всего один жанры получить от этого кода, Криминал

Я хочу Преступность и драмы вместе, как этот

Array 
(
    [0] => Array 
     (
      [id] => 206 
      [title] => Malta Kartali 
      [original_title] => The Maltese Falcon 
      [year] => 1941 
      [link] => http://www.imdb.com/title/tt0033870/ 
      [rating] => 8.1 
      [directors] => 
      [writers] => 
      [stars] => 
      [musicians] => 
      [languages] => 
      [countries] => 
      [time] => 100 
      [imdb_id] => tt0033870 
      [image] => http://localhost/works/work/sipoyler.com/public/images/filmposter/tt0033870.jpg 
      [slug] => the-maltese-falcon 
      [date_added] => 2016-04-05 16:11:32 
      [fc_id] => 31 
      [film_id] => 206 
      [genres_id] => 1,2 
      [genres_name] => Crime,Drama 
     ) 
) 

Как я могу решить эту проблему?

Спасибо ..

ответ

4
public function getFilm($id){ 

     $result = $this->db->query("SELECT a.*,b.*,GROUP_CONCAT(c.genres_name ORDER BY c.genres_name ASC SEPARATOR ', ') AS genres_name ,GROUP_CONCAT(c.genres_id ORDER BY c.genres_id ASC SEPARATOR ', ') AS genres_id FROM film_genres a 
           LEFT JOIN film b ON a.film_id = b.id 
           LEFT JOIN genres c ON a.genres_id = c.genres_id 
           WHERE a.film_id=$id")->row(); 
     return $result; 

    } 
+0

, что отличается от вашего и моего ответа лол: D –

+0

@Rakib Роните ваш ответ получить дб error.Unknown столбца «б. name 'in' field list ' – syntaxe

+0

Спасибо за ваши ответы. – syntaxe

0

Попробуйте

public function getFilm($id){ 

     $result = $this->db->query("SELECT a.*,b.*,GROUP_CONCAT(c.genres_name ORDER BY c.genres_name ASC SEPARATOR ', ') AS genres_name ,GROUP_CONCAT(c.genres_id ORDER BY c.genres_id ASC SEPARATOR ', ') AS genres_id FROM film_genres a 
           LEFT JOIN film b ON a.film_id = b.id 
           LEFT JOIN genres c ON a.genres_id = c.genres_id 
           WHERE a.film_id=$id")->row(); 
     return $result; 

    } 
Смежные вопросы