如何在codeigniter中检查不相等

时间:2015-10-12 15:54:48

标签: mysql codeigniter

在我的查询中显示了一些错误!= this.I想要获取不在任命表中的ID

   function getFilterStudents()
   {   
    $this->db->distinct();
    $this->db->select('student_application.applicant_id,student_application.applicant_first_name,student_application.father_name,student_application.mother_name,student_application.applicant_grade');
    $this->db->from('student_application');
    $this->db->join('appointment,appointment.applicant_id !=student_application.applicant_id');
    $this->db->where('student_application.filter_status',1) ;
    $filter_students=$this->db->get();
    return $filter_students;
   } 

3 个答案:

答案 0 :(得分:1)

您实际上并不需要使用QueryBuilder,因为您没有使用用户输入,这意味着如果您直接运行查询就行了。

function getFilterStudents() {

            $q = $this->db->query('SELECT * FROM `student_application` WHERE 
                 `applicant_id` NOT IN(SELECT `applicant_id` FROM `appointment`)
                 AND `filter_status` = 1');
            return $q->result();
}

我们正在使用子查询来检索约会表中的所有申请人ID。在主查询中,我们告诉它返回其applicant_id在我们的子查询中不存在的所有行。

我故意删除了distinct的使用,因为我猜你不应该有多个包含相同的applicant_id的应用程序,如果不是这样,那么你可以再次使用不同的函数。

这会直接返回结果集而不是你正在做的事情(你正在返回一个查询资源,这意味着你正在调用 - > gt; result()在你的视图或控制器中的某些地方这实际上不是控制器或视图)。

答案 1 :(得分:0)

您可以通过消除JOIN并添加类似于此的where子句来执行NOT IN子查询(请记住,您必须告诉CI不要转义条件,因此使用NULL,FALSE参数):

$this->db->where('`applicant_id` NOT IN (SELECT `applicant_id` FROM `application`)', NULL, FALSE);

以下是整个事情:

 function getFilterStudents()
   {   
    $this->db->distinct();
    $this->db->select('applicant_id, applicant_first_name, father_name, mother_name, applicant_grade');
    $this->db->from('student_application');
    $this->db->where('student_application.filter_status',1);
    $this->db->where('`applicant_id` NOT IN (SELECT `applicant_id` FROM `application`)', NULL, FALSE);
    $filter_students=$this->db->get();
    return $filter_students;
   } 

答案 2 :(得分:0)

您正在编写SQL语句,因此使用NOT EQUAL语句的正确方法是 <>