在我的查询中显示了一些错误!= 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;
}
答案 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
语句的正确方法是 <>
。