2011-08-15 5 views
2

ユーザの選択に基づいて、クエリで結果をフィルタリングする必要がありますが、ANDの後に動的OR文を正しく実装する方法には固執しています。私は現在CodeIgniterでActive Recordを使用していますが、これは変更する必要があります。何のORステートメントがある場合は、その後、私は必要はありません "WHERE city.id = 9 AND(eventTypeを= 8またはeventTypeを= 9)"クエリでの動的OR/AND

  1. :私は基本的に以下のコードを作成する必要があり

    1-Nまたは文

私のコードがあるかもしれません

  • 次のように現在ある:

    $this->db->where('city.id =', $cityID); 
    
        if ($eventTypes != NULL){ 
           foreach ($eventTypes as $item){ 
            $eventTypeID = intval($item); 
            $this->db->or_where('eventtype.id =', $eventTypeID); 
           } 
          } 
    

    これは、生成:city.id = 13 OR eventtype.id = 6 OR eventtype.id = 8 ...私はAND(

  • 答えて

    1

    CodeIgniterの"ActiveRecordの"(エアクオートが必要WHERE ...)クラスはかなり限られており、実行しませんよく進化したAND/ORスコープで、 "より高度な"クエリのための生のSQLに戻ることを指しています。

    私は `私はあなたが意味すると思う...

    $where = "city.id = $cityID "; 
    
    if ($eventTypes != NULL) 
    { 
        $where .= "AND ("; 
        foreach ($eventTypes as $i => $type) 
        { 
         $eventTypeID = intval($type); 
    
         // if it's not the first element 
         // (assumes $eventTypes is non-associative) 
         if ($i !== 0) 
         { 
          $where .= "OR "; 
         } 
         $where .= "eventtype.id = $eventTypeID "; 
        } 
        $where .= ") "; 
    } 
    
    $this->db->where($where); 
    
    +0

    をあなたが欠けている特定のクエリを構築するために、独自のWHERE文字列を策定してからちょうど

    $this->db->where($sql) 

    例を使用します。='。 –

    +1

    dah!言語間で多くのバウンスに、ありがとう。 – jondavidjohn

    +0

    となります。助けてくれてありがとう! – user464180