wake-up-neo.net

So verbinden Sie drei Tabellen in Codeigniter

Ich verwende Codeigniter-Framework, um ein Musik-CMS zu entwickeln. Ich habe 3 Tabellen in der MySQL-Datenbank. Derzeit arbeite ich in "Album" Table und "Model, Controller". Ich möchte "Album" Table 1 und JOIN "Album" -> "cat_id" mit "Category" -> "cat_id" auswählen und alle Kategorien abrufen.

Dann möchte ich "Album" -> "album_id" auf "Soundtrack" -> "album_id" JOIN und dann alle Soundtrack-Schallplatten von A bis Z abrufen.

Bitte helfen Sie mir jemand, die richtige Codeigniter-Abfrage anzuzeigen. Wie kann ich SELECT-Tabellen und Join-Tabellen auswählen und dann Datensätze aus 3 Tabellen abrufen?

Tabelle 1 -> Kategorie

  • cat_id

  • katzenname

  • cat_title
  • datum

    Tabelle 2 -> Album

  • cat_id
  • album_id

  • albumtitel

  • album_details

    Tabelle 3 -> Soundtrack

  • album_id

  • track_title

  • track_url
  • datum
18
Ahmed iqbal

Verwenden Sie diesen Code im Modell

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;
    }
}
39
Shibu Thomas

Versuchen Sie es mit Daten ...

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

während für Datum versuchen Sie dies ...

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

versuche dies

In deinem Modell

Wenn Sie möchten, dass alle Albumdaten verwendet werden 

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

wenn Sie bestimmte Albumdaten verwenden möchten 

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

Versuchen Sie es wie folgt:

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

Wenn kein Ergebnis gefunden wird, gibt CI false zurück, andernfalls true

1
Bablu Ahmed
   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
Reena Mori
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
ahmad