简体   繁体   English

Codeigniter:函数中的位置

[英]Codeigniter: Where in functions

So I have this MySQL Query, Can you please help me to convert this into codeigniter way? 所以我有这个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');

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... 如果查询是这样的,您能否找出如何在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.. 首先获取skill ids数组,然后在$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;

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. 您可以简单地使用$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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM