2010-08-21 4 views
9

ont une telle requête zend:Zend-cadre DB: OU au lieu de l'opérateur AND

$select = $this->_table 
       ->select() 
       ->where('title LIKE ?', '%'.$searchWord.'%') 
       ->where('description LIKE ?', '%'.$searchWord.'%') 
       ->where('verified=1 AND activated=1'); 

En d'autres termes, il ressemble à:

SELECT `some_table`.* FROM `some_table` WHERE (title LIKE '%nice house%') AND (description LIKE '%nice house%') AND (verified=1 AND activated=1) 

Si j'ai deux et des phrases, zend le connecter par Opérateur ET. Comment puis-je le connecter avec l'opérateur OU? Parce que j'ai besoin:

...(title LIKE '%nice house%') OR (description LIKE '%nice house%')... 

Votre aide serait appréciée.

+0

Je pense que la priorité de l'opérateur sql .. sera prise en compte, car ces requêtes seront converties en sql simple. Je suggère simplement que moi aussi j'ai ce doute et suis venu ici –

Répondre

24
$this->_table->select()->orWhere($condition); 

Pour construire plus de requêtes (I.G. sous Complexe-conditions) vous pourriez avoir à utiliser $this->table->getAdapter()->quoteInto() et écrivez votre SELECT manuellement. (? Plus)

1

J'ai mis en œuvre votre requête zend

$select = $this->_table 
       ->select() 
       ->where('title LIKE ?', '%'.$searchWord.'%') 
       ->ORwhere('description LIKE ?', '%'.$searchWord.'%') 
       ->where('verified=1 AND activated=1'); 
1

Les autres réponses ici ne fonctionnent pas, la solution actuelle est d'appeler nid() et unnest() dans la clause where:

$select->where 
    ->nest() 
     ->equalTo('column1', 1) 
     ->or 
     ->equalTo('column2', 2) 
    ->unnest() 
    ->and 
    ->equalTo('column3', 3); 
Questions connexes