Php Codeigniter:函数中的何处

Php Codeigniter:函数中的何处,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个MySQL查询,你能帮我把它转换成codeigniter方式吗 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

我有一个MySQL查询,你能帮我把它转换成codeigniter方式吗

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');
我已经试过了,但没用,我想他们会的

$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;

如果查询是这样的,您能想出如何在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';

首先获取技能ID数组,然后在
$this->db->where_in()
中应用
数组

        $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;
试试这个

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

这有帮助吗?

还没有尝试过,但应该可以工作,在不了解您的模式的情况下很难

$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;

.

您可以简单地使用
$this->db->query()
方法来执行它

$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;
}

谢谢你的回答,但我可以。但是,我想使用where infunction@SyedMuhammadWaqas为什么?您也可以在CI中使用纯SQL语法
$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;
}