2016-08-22 6 views
1

私はアクティブレコードを使用してcodeigniterに検索機能を記述しました。私がしたいのは、payment_type = 5で、同じレコードのorder_status = 1であれば、それを省略したいということです。しかし、payment_type = 5とorder_status = 2のレコードが存在する可能性があります。両方の条件が満たされていれば、そのレコードを省略しなければなりません。 (payment_type = 5 AND order_status = 1)。私は以下のモデル関数を追加しました。アクティブなレコードを使ってこれを行う方法を知りたい。誰かが本当に役に立つと思うアイデアがあれば。前もって感謝します。Codeigniterのアクティブなレコードでwhere_not_in()を2つの条件で使用する方法は?

public function getSalesByStore($from,$to,$status,$filter_stores,$offset, $amount, $limit = '') 
    { 
     $result = array(); 
     $this->db->select("*,a.created AS order_created,store_name, users.name, a.id as orderid, a.payment_type AS payment"); 
     $this->db->from("$this->table a"); 
     $this->db->join('users', "a.customer_id = users.id"); 
     $this->db->join('stores', "a.store_id = stores.id"); 
     $this->db->order_by("a.id", "desc"); 


     if(!empty($status)) 
     { 
      if ($status == 6) 
      { 
       $this->db->where('order_status != 3'); 
      } 
      elseif ($status == 1) 
      { 
       $this->db->where("a.payment_type != 5 AND order_status = $status"); 
      } 
      else 
      { 
       $this->db->where('order_status', $status);  
      } 
     } 

     if(!empty($filter_stores)) 
     { 
      $this->db->where('store_id in ('.$filter_stores.')'); 
     } 
     if(!empty($from)) 
     { 
      $this->db->where('date(a.created) >=', date($from)); 
     } 
     if(!empty($to)) 
     { 
      $this->db->where('date(a.created) <=', date($to)); 
     } 
     if(!empty($amount)) 
     { 
      if ($amount == 1) 
      { 
       $this->db->where("a.total_amount <=", 50); 
      }else if ($amount == 2) 
      { 
       $this->db->where("a.total_amount >=", 50);  
      }  
     } 
     $this->db->limit($limit, $offset); 
     $query = $this->db->get(); 
     if ($query->num_rows() > 0) 
     { 
      foreach ($query->result() as $row) 
      { 
       $row->order_status = $this->get_status($row->order_status); 
       $result [] = $row; 
      } 
     } 

     return $result; 

    } 
+0

を探している答えかもしれませんが、HTTPSここを見て://www.codeigniterを。 $ this-> db-> where_in() 'と' $ this-> db-> where_not_in() 'には、com/userguide3/database/query_builder.html#探しているデータがあります。 – RanjanaLK

答えて

1

使用このコード

<?php 
public function getSalesByStore($from,$to,$status,$filter_stores,$offset, $amount, $limit = '') 
    { 
     $result = array(); 
     $this->db->select("*,a.created AS order_created,store_name, users.name, a.id as orderid, a.payment_type AS payment"); 
     $this->db->from("$this->table a"); 
     $this->db->join('users', "a.customer_id = users.id"); 
     $this->db->join('stores', "a.store_id = stores.id"); 
     $this->db->order_by("a.id", "desc"); 


     if(!empty($status)) 
     { 
      if ($status == 6) 
      { 
       //$this->db->where('order_status != 3'); 

       $this->db->where_not_in("order_status",'3'); 
      } 
      elseif ($status == 1) 
      { 
       // $this->db->where("a.payment_type != 5 AND order_status = $status"); 

       $this->db->where("order_status","$status"); 
       $this->db->where_not_in("a.payment_type",'5'); 
      } 
      else 
      { 
       $this->db->where('order_status', $status);  
      } 
     } 

     if(!empty($filter_stores)) 
     { 
      // $this->db->where('store_id in ('.$filter_stores.')'); 

      $this->db->where_in('store_id',"$filter_stores"); 
     } 
     if(!empty($from)) 
     { 
      $this->db->where('date(a.created) >=', date($from)); 


     } 
     if(!empty($to)) 
     { 
      $this->db->where('date(a.created) <=', date($to)); 
     } 
     if(!empty($amount)) 
     { 
      if ($amount == 1) 
      { 
       $this->db->where("a.total_amount <=", 50); 
      }else if ($amount == 2) 
      { 
       $this->db->where("a.total_amount >=", 50);  
      }  
     } 
     $this->db->limit($limit, $offset); 
     $query = $this->db->get(); 
     if ($query->num_rows() > 0) 
     { 
      foreach ($query->result() as $row) 
      { 
       $row->order_status = $this->get_status($row->order_status); 
       $result [] = $row; 
      } 
     } 

     return $result; 

    } 
?> 
+0

$ status!が空の場合のみ、私は正しい出力を得ることができます。ステータスが空で空でないときに正しい出力を得たいです。 –

+0

があります!あなたのコードのための正しい条件になるでしょう! –

1

私はこのコードをチェックしていないが、これはあなたが

public function getSalesByStore($from,$to,$status,$filter_stores,$offset, $amount, $limit = '') 
{ 
    $result = array(); 
    $this->db->select("*,a.created AS order_created,store_name, users.name, a.id as orderid, a.payment_type AS payment"); 
    $this->db->from("$this->table a"); 
    $this->db->join('users', "a.customer_id = users.id"); 
    $this->db->join('stores', "a.store_id = stores.id"); 
    $this->db->order_by("a.id", "desc"); 
    $this->db->where_not_in("a.payment_type",5); 
    $this->db->where_not_in("order_status",1); 


    if(!empty($status) && !empty($filter_stores)){ 
     if ($status == 6){ 
      $this->db->where_not_in('order_status',3); 
     } 
     else{ 
      $this->db->where('order_status', $status);  
     } 
    } 
    if(!empty($filter_stores)){ 
     $this->db->where('store_id in ('.$filter_stores.')'); 
    } 
    if(!empty($from)){ 
     $this->db->where('date(a.created) >=', date($from)); 
    } 
    if(!empty($to)){ 
     $this->db->where('date(a.created) <=', date($to)); 
    } 
    if(!empty($amount)){ 
     if ($amount == 1){ 
      $this->db->where("a.total_amount <=", 50); 
     }else if ($amount == 2){ 
      $this->db->where("a.total_amount >=", 50);  
     }  
    } 
    $this->db->limit($limit, $offset); 
    $query = $this->db->get(); 
    if ($query->num_rows() > 0) { 
     foreach ($query->result() as $row){ 
      $row->order_status = $this->get_status($row->order_status); 
      $result [] = $row; 
     } 
    } 
    return $result; 
} 
+0

ありがとう。これは答えを得るのを助けた正確な答えではないと思っていました。 –

関連する問題