Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
Salut,
C'est possible
Zend place des parenthèses autour de chaque expression "where" (or ou and)
A+ benjamin
Hors ligne
Si c'est un AND alors ce sont deux where() que tu dois mettre l'un à la suite de l'autre.
Hors ligne
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
même problématique que citronbleu-v
Hors ligne
Je ne pense pas ça soit prévu dans Zend_Db_Select. Il faudra "tricher" je pense :
$select->where("machin=?",1) ->where(new Zend_Db_Expr("truc=4 OR bidul=3"));
A+, Philippe
Hors ligne
hmmm je vais testé avec t ligne de code philipe
dommage que ya pas plus propre -_-
merci
Hors ligne
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
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
Hors ligne
Hellow
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
Toujours personnes a trouvé la recette miracle qui fera dire à tout le monde Ouhhahahhaha super génial cool
Hors ligne
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.
//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
Pages: 1