2010-12-28 4 views
1

J'ai la sélection suivante:Zend Db Sélectionnez « ET » problème

$select = self::getConnection()->select() 
          ->setSqlCalcFoundRows(true) 
          ->from(array('person' => parent::$_prefix . self::$_tableName), $rows) 
          ->where($wherePerson['statement'], $wherePerson['value']) 
          ->where($whereOwner['statement'], $whereOwner['value']) 
          ->order($sort .' '. $sortDir) 
          ->limit($limit, $offset); 

Maintenant, je veux ajouter un AND supplémentaire. Mais seulement si le champ a une valeur (complétée par l'utilisateur). Ainsi, lorsque le champ propriétaire est vide, ne peut pas être le résultat de ma requête (voir ET):

SELECT SQL_CALC_FOUND_ROWS xxx 
FROM xxxx AS xxxx 
WHERE (person_id = '305000270002') 
    AND (owner = '') 
ORDER BY xxxx ASC 
LIMIT 25 

Je ne ont pas besoin et si elle est vide, sinon mon résultat est faux.

Répondre

4

les opérations suivantes:

$select = self::getConnection()->select() 
           ->setSqlCalcFoundRows(true) 
           ->from(array('person' => parent::$_prefix . self::$_tableName), $rows) 
           ->where($wherePerson['statement'], $wherePerson['value']) 
           ->where($whereOwner['statement'], $whereOwner['value']) 
           ->order($sort .' '. $sortDir) 
           ->limit($limit, $offset); 

if (false === empty($theFieldToCheck)) { 
    // add additional WHERE part if 
    // a field IS NOT empty 
    $select->where($additionalWherePart); 
} 

qui crée cette déclaration de base et peut être étendu par la suite par la méthode où() sur les conditions spécifiques.

+0

cela fonctionne très bien, merci – lander