使用多个 where 子句在 CodeIgniter 中查询

Query in CodeIgniter with several where clauses

我正在尝试使用严格的 where 子句进行查询,但它给出了错误的结果。我需要查看这些具有 role_id=1(即学生)的用户,这些用户未被停用。我取$this->uri->segment(3)=teacher_id。第三个where子句是我只需要和老师所在学校在同一所学校学习的学生,我带$this->uri->segment(3)。我的查询是:

public function select_students() {
   

      $this->db->select('*');
      $this->db->from('users');
      $this->db->where('deactivated_at = "0000-00-00 00:00:00" || deactivated_at IS NULL 
        AND role_id =1 AND school_id = ("SELECT school_id FROM users WHERE user_id=$this->uri->segment(3)")');
 $result=$this->db->get();
        return $result->result();
  }

我找到了解决方案:

 public function select_students() {
  
        $this->db->select('*');
        $this->db->from('users');
        $this->db->where('(users.deactivated_at = "0000-00-00 00:00:00" OR users.deactivated_at IS NULL) AND users.role_id = 1 ');
        $this->db->where('users.school_id',$this->uri->segment(4) );
        $result=$this->db->get();
            return $result->result();
 }

最好使用自定义 SQL,然后用 CI 方法换行。这将使您可以灵活地编写任何自定义查询并使用 CI 安全性保护查询。

public function select_students() {
   $sql = SELECT * FROM users WHERE deactivated_at = "0000-00-00 00:00:00" OR deactivated_at IS NULL AND role_id =1 AND school_id = (SELECT school_id FROM users WHERE user_id= (int) $this->uri->segment(3));
   $query = $this->db->query($sql);
   return $query->result();
 }