2017-04-30 64 views
2

我寫了一個SQL查詢,它工作正常。我該怎麼寫codeigniter如何寫AND OR條件codeigniter

$sql = "SELECT * 
     FROM single_message 
     WHERE 
      (school_id='$schoolId' AND 
      classId='$classId' AND 
      sectionId='$sectionId' AND 
      sender_id='$senderId' AND 
      receiver_id ='$receiverId' 
      ) OR 
      (chool_id='$schoolId' AND 
      classId='$classId' AND 
      sectionId='$sectionId' AND 
      sender_id='$receiverId' AND 
      receiver_id ='$senderId' 
      ) 
     ORDER BY messageId DESC"`; 

這是我已經試過:

$condition = array(
       'school_id' => $schoolId, 
       'classId' => $classId, 
       'sectionId' => $sectionId, 
       'sender_id' => $senderId, 
       'receiver_id' => $receiverId 
      ); 

$this->db->select('*'); 
$this->db->where($condition); 
return $this->db->get('single_message')->result_array(); 

回答

0

傳遞第二個參數null和第三個參數作爲false將導致不逃避查詢。

試試這個代碼:

$this->db->select('*'); 
$this->db->where("school_id='$schoolId' AND classId='$classId' AND sectionId='$sectionId' AND sender_id='$senderId' AND receiver_id ='$receiverId') OR (chool_id='$schoolId' AND classId='$classId' AND sectionId='$sectionId' AND sender_id='$receiverId' AND receiver_id ='$senderId'", null, false); 
$this->db->order_by("messageId", "desc"); 
$this->db->get(); 

下面是笨文檔Where reference

1

根據您的SQL查詢:

$sql = "SELECT * FROM single_message WHERE (school_id='$schoolId' AND classId='$classId' AND sectionId='$sectionId' AND sender_id='$senderId' AND receiver_id ='$receiverId') OR (chool_id='$schoolId' AND classId='$classId' AND sectionId='$sectionId' AND sender_id='$receiverId' AND receiver_id ='$senderId') ORDER BY messageId DESC"; 

有編寫查詢兩種方式。我會通過一個解釋這兩個途徑之一:

解決方案1: 你可以簡單地只是把你的條件在where子句像解釋如下─>

$condition = "(school_id='$schoolId' AND classId='$classId' AND sectionId='$sectionId' AND sender_id='$senderId' AND receiver_id ='$receiverId') OR (chool_id='$schoolId' AND classId='$classId' AND sectionId='$sectionId' AND sender_id='$receiverId' AND receiver_id ='$senderId')"; 

     $this->db->select('*'); 
     $this->db->where($condition); 
     return $this->db->get('single_message')->result_array(); 

在這裏你可以看到,我有完整的通行證條件以字符串格式表示。這是最好的解決方案。另一種寫這個查詢的方法是。

解決方案2: 查詢分組 - >它允許您通過將它們括在圓括號中來創建WHERE子句組。所以查詢會是這樣的:

$condition['AND'] = array(
     'school_id' => $schoolId, 
     'classId' => $classId, 
     'sectionId' => $sectionId, 
     'sender_id' => $senderId, 
     'receiver_id' => $receiverId 
    ); 
    $condition['OR'] = array(
     'school_id' => $schoolId, 
     'classId' => $classId, 
     'sectionId' => $sectionId, 
     'sender_id' => $receiverId, 
     'receiver_id' => $senderId 
    ); 

    $this->db->select('*'); 

    // Starts first group 
    $this->db->group_start(); 

// AND condition placed in below line 
    $this->db->where($condition['AND']); 

// First group ends here 
    $this->db->group_end(); 

// Another group has been started here for OR clause 
    $this->db->or_group_start(); 

// Here we placed our OR codition 
    $this->db->where($condition['OR']); 

// Second group ends here 
    $this->db->group_end(); 

return $this->db->get('single_message')->result_array(); 

它會產生你需要的確切結果。如果您有任何疑問,請告訴我。有關更多詳細信息,請在此處閱讀查詢生成器說明:Query Grouping