2017-11-22 12 views
0

というコードネームを使用してラジオ(または/)ボタンを選択すると、AND &に基づいて複数のフィールドの検索クエリを実行します。私は2つのラジオボタンを1つのAND OPERATOR(両方の基準に一致)と他のOR OPERATOR(基準の1つ)に配置しました。AND演算子は機能していますが、OR演算子が機能していない場合は、

ここで私の問題はAND演算子は正常に実行されていますが、OR演算子は実行中ではありません。

私は以下のコードを書いた:

モデル:あなたがここで何をしているか

// Variables treatise 
$lnameFilter=$this->input->post('lnameFilter'); 
$id=$this->input->post('id'); 
$firstname= $this->input->post('fname'); 
$opt=$this->input->post('and'); 
$strWhere="id_photo LIKE "."'%".$id."%'"; 

// $lnamefilter treatise 
if(!empty($lnameFilter)) { 
    // AND OPERATOR (ON SELECTING RADIO BUTTON) 
    if($opt==1) { 
     if($strWhere != "") { 
      $strWhere=$this->db->where("($strWhere"." AND lastname LIKE "."'%".$lnameFilter."%')"); 
     } 
     else { 
      $strWhere=$this->db->where("(lastname LIKE "."'%".$lnameFilter."%')"); 
     } 
    } 
    // OR OPERATOR (ON SELECTING RADIO BUTTON) 
    if($opt==2) { 
     if($strWhere != "") { 
      $strWhere=$this->db->where("($strWhere"." OR lastname LIKE "."'%".$lnameFilter."%')"); 
     } 
     else { 
      $strWhere=$this->db->where("(lastname LIKE "."'%".$lnameFilter."%')"); 
     } 
    } 
} 

// $firstname treatise 
if(!empty($firstname)) { 
    if($opt==1) { 
     if($strWhere != "") { 
      $strWhere=$this->db->where("($strWhere"." AND firstname LIKE "."'%".$firstname."%')"); 
     } 
     else { 
      $strWhere=$this->db->where("(firstname LIKE "."'%".$firstname."%')"); 
     } 
    } 
    if($opt==2) { 
     if($strWhere != "") { 
      $strWhere=$this->db->where("($strWhere"." OR firstname LIKE "."'%".$firstname."%')"); 
     } 
     else { 
      $strWhere=$this->db->where("(firstname LIKE "."'%".$firstname."%')"); 
     } 
    } 
} 
+0

あなたは私たちに '$ strWhere' – Hackerman

答えて

0

かなりわからないのが、ORは

で2行に....これを試してみてください

変更

$strWhere=$this->db->where("($strWhere"." OR lastname LIKE "."'%".$lnameFilter."%')"); 

から

$strWhere=$this->db->where("(($strWhere)"." OR lastname LIKE "."'%".$lnameFilter."%')"); 

これで解決するはずです。 $strWhereORの文が左から右に実行され、ANDORがある場合、非常に混乱することがあります。

+0

その@Forbsを動作していない...まだAND演算子のみ作業 $ strWhere =の$ this - > DB->ここで、( "(($ strWhere)" の内容を表示することができます"または" lastname LIKE "。" '%'。$ lnameFilter。 "% ')"); –

0

$ strWhere = $ this-> db-> where();を実行する必要はありません。

は自分の条件

//ands 

$this->db->like('id_photo', $id); 
$this->db->like('id_photo', $lastname); 
//chain the likes this way instead of "(($strWhere)"." OR lastname LIKE "."'%".$lnameFilter."%')" 


//ors 

$this->db->like('id_photo', $id); 
$this->db->or_like('id_photo', $lastname); 

https://www.codeigniter.com/userguide3/database/query_builder.html

+0

$ this-> db-> or_like( 'id_photo'、$ lastname); 〜 $ this-> db-> or_like( 'lastname'、$ lastname); 私はそう思います... y id_photoはuを説明できます –

+0

$ this-> db-> where( 'ID'、$ ID); $ this-> db-> or_like( 'LastName'、$ lname); このコードはORのために働いています... THANQ ur code think .... @ Parker Dell –

0

を行う場所のコードの下に試してみてください代わりのように使用します。

$strWhere=$this->db->where("(".$strWhere.") OR (lastname LIKE '%".$lnameFilter."%')"); 
関連する問題