【发布时间】:2019-03-14 23:00:38
【问题描述】:
我有两个要查询的表,用户表和 user_job 表
我想要实现的是在 CodeIgniter 中编写一个 MySQL 查询,以显示用户表中的用户信息,如果用户表中的 user_status 为“活动”并且如果 user_job 表中没有 user_job_status 等于“试用期”的行或 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条件,它仍然会显示用户信息。
请帮忙。
【问题讨论】:
-
你试过
$this->db->or_where("(user_job.user_job_status != 'Active' OR user_job.user_job_status != 'On Probation')", NULL, FALSE); -
请阅读:blog.codinghorror.com/a-visual-explanation-of-sql-joins 它总能帮助我为 JOIN 设置正确的“策略”
-
我试过了,但结果还是一样。如上一个查询。第一个条件是用户应该处于活动状态,即 user_status = "Active" 第二个条件是用户不应持有工作,即 user_job_status 不应为“Active”或“On Probation”。我认为这里的问题在于 join 语句。例如,如果我是活跃用户并且我有一份工作,但我在数据库中也有以前的工作记录,并且状态不是“活跃”或“试用期”,它仍然会显示我的信息。
标签: php mysql codeigniter