[英]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.