Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-07-2009 19:36:15

citronbleu-v
Membre
Lieu: Béziers ou Arles
Date d'inscription: 03-02-2009
Messages: 79
Site web

[Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Bonjour,

j'aimerai faire " SELECT * FROM table WHERE machin = 1 AND ( truc = 4 OR bidul = 3 etc..) "

sous cette forme $this->select()->where('madhin = ?', 1)->orWhere('.....')....

Quelqu'un sait si c'est possible ?

Hors ligne

 

#2 02-07-2009 20:49:54

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Salut,

C'est possible smile

Zend place des parenthèses autour de chaque expression "where" (or ou and)


A+ benjamin


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 02-07-2009 23:21:21

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Si c'est un AND alors ce sont deux where() que tu dois mettre l'un à la suite de l'autre.

Hors ligne

 

#4 02-07-2009 23:30:03

citronbleu-v
Membre
Lieu: Béziers ou Arles
Date d'inscription: 03-02-2009
Messages: 79
Site web

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

oui mais j'ai fait ça
->where(..)
->where(..)
->orWhere(..)
->orWhere(..)

en gros j'aimerai dissocier le premier des suivants, et where() n'accepte qu'un string en premier paramètre, donc comment regrouper plusieurs opérateur dans une parenthèse je ne vois pas.
->where(..)
(
     ->where(..)
    ->orWhere(..)
    ->orWhere(..)
)

Hors ligne

 

#5 21-10-2009 11:01:47

pinouf
Membre
Date d'inscription: 05-09-2008
Messages: 41

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

même problématique que citronbleu-v

Hors ligne

 

#6 21-10-2009 11:13:56

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Je ne pense pas ça soit prévu dans Zend_Db_Select. Il faudra "tricher" je pense :

Code:

$select->where("machin=?",1)
          ->where(new Zend_Db_Expr("truc=4 OR bidul=3"));

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#7 21-10-2009 11:36:50

pinouf
Membre
Date d'inscription: 05-09-2008
Messages: 41

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

hmmm je vais testé avec t ligne de code philipe
dommage que ya pas plus propre -_-

merci smile

Hors ligne

 

#8 21-10-2009 13:50:59

Junk
Membre
Lieu: Paris
Date d'inscription: 18-09-2009
Messages: 27

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Bonjour,

J'ai eu le même souci il y a quelques temps de cela et il n'y a pas malheureusement de méthode miracle hmm

J'avais alors du écrire la requête en langage SQL classique l'exécuter avec un fetchAll().

C'est de toute manière pour les requêtes qui commencent a être structurées la seule solution tongue

Hors ligne

 

#9 21-10-2009 14:22:50

pinouf
Membre
Date d'inscription: 05-09-2008
Messages: 41

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Hellow smile
bon ben je me suis pas fait chié jai fais toute ma requête dans le ->where()
cela marche c'est le principal mais bon moche !

merci pour vos aides et remarques
bonne journée

Hors ligne

 

#10 28-10-2009 23:29:03

citronbleu-v
Membre
Lieu: Béziers ou Arles
Date d'inscription: 03-02-2009
Messages: 79
Site web

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Toujours personnes a trouvé la recette miracle qui fera dire à tout le monde Ouhhahahhaha super génial cool smile

Hors ligne

 

#11 31-05-2010 18:26:52

revlis
Nouveau membre
Date d'inscription: 31-05-2010
Messages: 1

Re: [Zend_Db][1.8] Multi opérateur logique dans une clause WHERE

Bonjour,
Pour ceux, qui cherchent une solution a peut près "propre" au problème, le mieux que j'ai trouvé c'est de passer par getPart et resetPart.

Code:

//On commence par faire le OR
$select = $db->select()->orWhere(...)->orWhere(...)->orWhere(...)
//on récupère le where généré
$where = $select->getPart('where'); //$where contient quelquechose comme ( (...) OR (...) OR (...) )
//on reset le where 
$select->reset('where') //puis on reprend le where depuis le debut
 ->where(...) //puis on ajoute notre OR généré
 ->where(new Zend_Db_Expr(implode('', $where)));

on obtient quelque chose du genre
SELECT * FROM table WHERE (...) AND ( (...) OR (...) OR (...) )

Dernière modification par revlis (31-05-2010 18:27:35)

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