codeigniter mysql left join include select

前端 未结 2 614
南方客
南方客 2021-01-03 14:28

How to convert the left join include select to codeigniter sql method? Thanks. I just want to know.

SELECT c1.c1_id, c1.c1_name, c2.c2_id, c2.c2_name, c2.c2_         


        
相关标签:
2条回答
  • 2021-01-03 15:11

    You can use sub query way of codeigniter to do this for this purpose you will have to hack codeigniter. like this Go to system/database/DB_active_rec.php Remove public or protected keyword from these functions

    public function _compile_select($select_override = FALSE)
    public function _reset_select()
    

    Now subquery writing in available And now here is your query with active record

    $select =   array('DISTINCT c2_id','f_id','f_name');
    $this->db->select($select);
    $this->db->from('file');
    $this->db->order_by('f_id','DESC');
    $subQuery1 = $this->db->_compile_select();
    
    unset($select);
    
    $this->db->_reset_select();
    
    $select =   array('DISTINCT c2_id','f_id','f2_name');
    $this->db->select($select);
    $this->db->from('file2');
    $this->db->order_by('f2_id','DESC');
    $subQuery2 = $this->db->_compile_select();
    
    unset($select); 
    
    $this->db->_reset_select();
    
    // And now your main query
    
    $select =   array(
                      'c1.c1_id',
                      'c1.c1_name',
                      'c2.c2_id',
                      'c2.c2_name',
                      'c2.c2_type',
                      'c2.c2_status',
                      'f.f_id',
                      'f.f_name',
                      'f2.f2_id',
                      'f2.f2_name'
                );
    
    $this->db->select($select);
    $this->db->from('category2 c2');
    $this->db->join("($subQuery1)",'f.c2_id = c2.c2_id','left');
    $this->db->join("($subQuery2)",'f2.c2_id = c2.c2_id','left');
    $this->db->where('c2.c2_status',1);
    $this->db->group_by('c2.c2_id');
    $main_query = $this->db->get();
    

    And the thing is done. Cheers!!! Note : While using sub queries you must use

    $this->db->from('myTable')
    

    instead of

    $this->db->get('myTable')
    

    which runs the query.

    Now, you can check query that has been built as

    echo $this->db->last_query();
    
    0 讨论(0)
  • 2021-01-03 15:19
    $query='SELECT c1.c1_id, c1.c1_name, c2.c2_id, c2.c2_name, c2.c2_type, c2.c2_status, f.f_id, f.f_name, f2.f2_id, f2.f2_name FROM category2 c2 
    LEFT JOIN category1 c1 ON c1.c1_id = c2.c1_id 
    LEFT JOIN (
        SELECT DISTINCT c2_id, f_id, f_name FROM file ORDER BY f_id DESC
    ) f ON f.c2_id = c2.c2_id
    LEFT JOIN (
        SELECT DISTINCT c2_id, f2_id, f2_name FROM file2 ORDER BY f2_id DESC
    ) f2 ON f2.c2_id = c2.c2_id
    WHERE c2.c2_status = ?
    GROUP BY c2.c2_id';
    $params=array();
    $params[]=1;
    $result=$this->db->query($query,$params);
    $result=$result->result_array();
    print_r($result); 
    

    I would avoid using Codeigniter's Active Record class unless your goal is to obfuscate your code.

    "Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live."

    0 讨论(0)
提交回复
热议问题