我有两个要查询的表,users表和user_job表
我要实现的是,如果用户表中的user_status为“有效”,并且如果user_job表中没有user_job_status等于“ On Probation”的行,则在CodeIgniter中编写一个MySQL查询以显示来自用户表的用户信息。或user_job_status等于“有效”
如果用户当前不在工作中,我想用简单的英文显示用户信息。
我当前的Codeigniter型号代码为:
//get all user that are not currently assigned to a position
function get_idle_user(){
$this->db->select('*');
$this->db->from('users');
$this->db->join('user_job', 'user_job.user_id_fk = users.user_id', 'INNER');
$this->db->where('users.user_status','Active');
$this->db->where("(user_job.user_job_status != 'Active' OR user_job.user_job_status != 'On Probation')", NULL, FALSE);
$this->db->group_by('users.user_id');
if($query = $this->db->get()){
return $query;
}else{
return false;
}
}
此代码的问题是,如果存在与用户相关的行并且user_job_status不满足上述where条件,它将仍然显示用户信息。
请帮助。
答案 0 :(得分:0)
我相信这就是你的追求...
$db->select('user_id_fk,COUNT(*) as `Tally`');
$db->where('user_job_status','On Probabtion');
$db->or_where('user_job_status','Active');
$db->group_by('user_id_fk');
$sub = $db->get_compiled_select('user_job_table');
$db->join("($sub) ujt",'ujt.user_id_fk = users.user_id AND Tally = 0','left');
$db->where('user_status','Active');
// View this query in full
//echo $db->get_compiled_select('users_table');
// Get the data
$data = $db->get('users_table')->result_array();
注意:
我已经离开了get_compiled_select
,这将使您能够查看完整的查询并了解其功能。如果取消注释回显行,则应注释掉$ data行。
此查询的意思是从job_table中获取所有状态为Active或On Probation且没有用户ID的用户。这样一来,您便可以从users_table中获得Active用户,并且计数总计为0。