Codeigniter:函数中的位置

So I have this MySQL Query, Can you please help me to convert this into codeigniter way?

select * 
  from projectskillslist ps
  LEFT 
  JOIN empskillslist s 
    ON s.skillsID = ps.skillsID
  LEFT 
  JOIN projects p 
    ON p.projectID = ps.projectID
  where ps.skillsID IN (SELECT skillsID 
                          FROM  empwithskills 
                         where empID='test');

I have tried this, but It didn't work they wway I wanted to.

$this->db->select("*");
        $this->db->from('projectskillslist ps');
        $this->db->join('empskillslist s', 's.skillsID = ps.skillsID', 'left');
        $this->db->join('projects p', 'p.projectID = ps.projectID', 'left');
        $this->db->where('ps.skillsID');
        $this->db->where_in("(SELECT skillsID FROM  empwithskills where empID='$username')");
        $query = $this->db->get();
        $result = array();
        if ($query->num_rows() > 0) {
            foreach ($query->result_array() as $row) {
                $result[] = $row;
            }
            return $result;
        }
        return false;

If the query was like this, could you figure out how to rewrite it in codeigniter...

select ps.name
     , s.the
     , p.rojects
     , y.ou
     , a.ctually
     , w.ant 
     , r.eturned 
  from projectskillslist ps
  LEFT 
  JOIN empskillslist s 
    ON s.skillsID = ps.skillsID
  LEFT 
  JOIN projects p 
    ON p.projectID = ps.projectID
  JOIN empwithskills x
    ON x.skillsID = ps.skillsID 
 where x.empID = 'test';

first get array of skill ids then apply array in $this->db->where_in().Like below..

        $this->db->select('skillsID');
        $this->db->where('empID',$username);
        $skillsIDs = $this->db->get('empwithskills')->result_array();//array of skills ids

        $this->db->select("*");
        $this->db->from('projectskillslist ps');
        $this->db->join('empskillslist s', 's.skillsID = ps.skillsID', 'left');
        $this->db->join('projects p', 'p.projectID = ps.projectID', 'left');
        $this->db->where_in('ps.skillsID',$skillsIDs);
        $query = $this->db->get();
        $result = array();
        if ($query->num_rows() > 0) {
            foreach ($query->result_array() as $row) {
                $result[] = $row;
            }
            return $result;
        }
        return false;

Try this

    $this->db->select("*");
    $this->db->from('projectskillslist ps');
    $this->db->join('empskillslist s', 's.skillsID = ps.skillsID', 'left');
    $this->db->join('projects p', 'p.projectID = ps.projectID', 'left');
    $this->db->where('ps.skillsID' in (SELECT skillsID FROM  empwithskills where empID='$username'), NULL, FALSE);
    $query = $this->db->get();
$this->db->select("*");
$this->db->from('projectskillslist ps');
$this->db->where('`ps.skillsID` IN (SELECT skillsID FROM  empwithskills where empID=`test`)', NULL, FALSE);
$CI->db->join('empskillslist s', 's.skillsID = ps.skillsID', 'left');
$CI->db->join('projects p', 'p.projectID = ps.projectID', 'left');
$query = $CI->db->get();

Does this help ?

Haven't tried it but should work, difficult without knowing your schema...

$query = $this->db->select('*')
    ->join('empwithskills ews', 'ews.empID = '.$username, 'inner')        
    ->join('empskillslist s', 's.skillsID = ps.skillsID', 'left') 
    ->join('projects p', 'p.projectID = ps.projectID', 'left')
    ->get('projectskillslist ps');

    if ($query->num_rows() > 0) {
        return $query->result_array();
    }
    return false;

.

You can simply use the $this->db->query() method to execute it.

$query =    $this->db->query("select * 
                  from projectskillslist ps LEFT JOIN empskillslist s 
                        ON s.skillsID = ps.skillsID  LEFT JOIN projects p 
                        ON p.projectID = ps.projectID  where ps.skillsID 
                        IN (SELECT skillsID FROM  empwithskills where empID='test')");
if ($query->num_rows() > 0) {
   return  $query->result();
}else{
    return FALSE;
}