Codeigniter复杂的MySQL查询

时间:2019-03-13 03:36:27

标签: php mysql codeigniter

我有两个要查询的表,users表和user_job表

users table structure

user_job table

我要实现的是,如果用户表中的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条件,它将仍然显示用户信息。

请帮助。

1 个答案:

答案 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();

注意:

  1. 您不需要select('*')-不需要
  2. 您不需要-> from()-可以在get()元素中使用它

我已经离开了get_compiled_select,这将使您能够查看完整的查询并了解其功能。如果取消注释回显行,则应注释掉$ data行。

此查询的意思是从job_table中获取所有状态为Active或On Probation且没有用户ID的用户。这样一来,您便可以从users_table中获得Active用户,并且计数总计为0。