Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-10-2016 23:18:01

aelamarti
Nouveau membre
Date d'inscription: 18-10-2016
Messages: 5

construire une requete zend

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

 

#2 19-10-2016 08:40:54

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: construire une requete zend

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

 

#3 19-10-2016 21:18:44

aelamarti
Nouveau membre
Date d'inscription: 18-10-2016
Messages: 5

Re: construire une requete zend

Bonjour,

Merci pour ton retour.

Voici mon code de la requete

Code:

[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

 

#4 20-10-2016 01:58:12

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: construire une requete zend

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

 

#5 20-10-2016 13:01:09

aelamarti
Nouveau membre
Date d'inscription: 18-10-2016
Messages: 5

Re: construire une requete zend

Oui mais avec orwhere je n'obtien pas le resultat  and(condition or condition1 or... )

Hors ligne

 

#6 25-10-2016 22:43:56

aelamarti
Nouveau membre
Date d'inscription: 18-10-2016
Messages: 5

Re: construire une requete zend

Bonsoir j'ai essayé de construire ma requete moi meme et voici le code que j'ai fait :

Code:

[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 :

Code:

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

 

#7 25-10-2016 23:32:58

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: construire une requete zend

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.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#8 26-10-2016 11:28:30

aelamarti
Nouveau membre
Date d'inscription: 18-10-2016
Messages: 5

Re: construire une requete zend

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages