2017-03-06 47 views
0

所以我有這個MySQL查詢,你能幫我把它轉換成codeigniter方式嗎?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; 
+0

您還可以在CI中使用純SQL語法 – Tikky

回答

0

如果查詢是這樣,你能弄清楚如何重寫它的笨......

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'; 
+0

感謝您的回答,但是我可以。但是,我想使用where函數 –

+0

@SyedMuhammadWaqas爲什麼? – Strawberry

0

skill ids第一GET數組,然後在下面$this->db->where_in()。就像..

申請 array
 $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; 
0

試試這個

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

這有幫助嗎?

0

還沒有嘗試過,但應該工作,很難在不知道你的架構......

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

0

您可以簡單地使用$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; 
}