Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je dois construire une requête de recherche zend de type where (condition 1 and condition 2 and ....) or(condition 1 and condition 2 and ...) a savoir que les conditions dans les deux parenthèses se construisent par un boucle selon le nombre de mots clé récupéré par la methode POST.
Quelqu'un à une idée?
Amicalement
Hors ligne
Bonjour,
Peux-tu nous donner du code ?
En gros, tu fais un Zend\Db\Select, dans les if tu ajoutes tes where sur cet objet, et à la fin tu execute le select en question.
Hors ligne
Bonjour,
Merci pour ton retour.
Voici mon code de la requete
[lang=php] $select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)->setIntegrityCheck(false) ->join('users', 'annonces.user_id = users.id_user',array('societe','pays')) ->join('user_type', 'users.type_user = id_user_type',array('titre_fr','titre_en')) ->joinLeft('photos', 'annonces.ads_id = id_annonce',array('path','extension')) //->where("annonces.status = 2") ->where("annonces.moderation = 1") ->where("annonces.public = 1") ->order("annonces.ads_id desc"); $part= explode(" ", $q); foreach ($part as $val) { $select->where("titre like ?",'%'.$val.'%'); }
ce que je voudrais faire c'est d'avoir en plus de cette requête une autre condition de cette façon:
Or ( foreach ($part as $val) {
$select->where("description like ?",'%'.$val.'%');
}
);
pour avoir tel resultat :
where (titre like%mot1% and titre like%mot2% and titre like %mot3%...... and titre like %mot n%) or (description like%mot1% and description like%mot2% and description like %mot3%...... and description like %mot n%).
D'avance merci pour votre aide
Amicalement
Hors ligne
Oula d'accord on est sur du ZF1 ! Je déplace dans le forum approprié !
Sinon pour répondre à la question, tu peux soit construire toi même la condition (... OR ...) et le passer dans le "->where()", soit tu peux utiliser les "->orWhere".
https://framework.zend.com/manual/1.12/ … ding.where
Hors ligne
Oui mais avec orwhere je n'obtien pas le resultat and(condition or condition1 or... )
Hors ligne
Bonsoir j'ai essayé de construire ma requete moi meme et voici le code que j'ai fait :
[lang=php] public function searchQuery($q,$type){ $query ='SELECT annonces.*, users.societe, users.pays, user_type.titre_fr, user_type.titre_en, photos.path, photos.extension FROM `annonces`INNER JOIN users ON annonces.user_id = users.id_user INNER JOIN user_type ON users.type_user = id_user_type LEFT JOIN photos ON annonces.ads_id = id_annonce WHERE (annonces.moderation = 1) AND (annonces.public = 1)' ; if($type=='produits') { $part= explode(" ", $q); foreach ($part as $val) { $menEscaped = mysql_real_escape_string($val); $query.='and ( titre like \'%'.$menEscaped.'%\')'; // $select->orwhere("description like ?",'%'.$val.'%'); } $query.='or ('; $part= explode(" ", $q); foreach ($part as $val) { $menEscaped = mysql_real_escape_string($val); $query.=' description like \'%'.$menEscaped.'%\' and '; } $query.='1=1 )'; }elseif($type='fournisseurs'){ $query.='and (societe like \'%'.$q.'%\')'; } $query.='order by annonces.ads_id desc'; $select=$this->getDefaultAdapter()->query($query); $data = $this->fetchAll($select); return $data ->toArray(); }
Mais quand je lance ma recherche j'ai l'erreur suivant :
Exception information: Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 Stack trace: #0 /home/alita235/public_html/sarolec2/library/Zend/Db/Statement.php(303): Zend_Db_Statement_Pdo->_execute(Array) #1 /home/alita235/public_html/sarolec2/library/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array) #2 /home/alita235/public_html/sarolec2/library/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array) #3 /home/alita235/public_html/sarolec2/library/Zend/Db/Table/Abstract.php(1575): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select)) #4 /home/alita235/public_html/sarolec2/library/Zend/Db/Table/Abstract.php(1390): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select)) #5 /home/alita235/public_html/sarolec2/application/models/DbTable/Ads.php(89): Zend_Db_Table_Abstract->fetchAll(Object(Zend_Db_Statement_Pdo)) #6 /home/alita235/public_html/sarolec2/application/controllers/SearchController.php(40): Application_Model_DbTable_Ads->searchQuery('te en cuivre', 'produits') #7 /home/alita235/public_html/sarolec2/library/Zend/Controller/Action.php(516): SearchController->indexAction() #8 /home/alita235/public_html/sarolec2/library/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch('indexAction') #9 /home/alita235/public_html/sarolec2/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #10 /home/alita235/public_html/sarolec2/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #11 /home/alita235/public_html/sarolec2/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #12 /home/alita235/public_html/sarolec2/public_html/index.php(35): Zend_Application->run() #13 {main}
D'avance merci pour votre aide.
Amicalement
Abdelfattah
Hors ligne
Avec un code pareil, une syntaxe error est le risque principal.
Il faut nous montrer un print SQL, avant le execute, pour voir la chaîne complète SQL cela t'en dira mieux d'ou se trouve l'erreur.
Hors ligne
Merci pour ton retour voici la requete generé :
SELECT annonces.*, users.societe, users.pays, user_type.titre_fr, user_type.titre_en, photos.path, photos.extension FROM `annonces`INNER JOIN users ON annonces.user_id = users.id_user INNER JOIN user_type ON users.type_user = id_user_type LEFT JOIN photos ON annonces.ads_id = id_annonce WHERE (annonces.moderation = 1) AND (annonces.public = 1)and ( titre like '%te%')and ( titre like '%en%')and ( titre like '%cuivre%')or ( description like '%te%' and description like '%en%' and description like '%cuivre%' and 1=1 )order by annonces.ads_id desc
A savoir que quand j'execute la requete dans phpmyadmin ça s'execute correctement.
Dernière modification par aelamarti (26-10-2016 20:35:41)
Hors ligne