Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello tout le monde,
quelqu'un sait il comment faire pour réaliser un union de 2 requête crée avec Zend_DB_Select ?
J'ai chercher dans la doc mais j'ai rien trouvé.
merci
Hors ligne
j'ai vraiment besoin d'un petit coup de main. Si une âme charitable passe dans le coin ))
Hors ligne
Coucou,
Vu dans l'API et dans les tests unitaires :
http://framework.zend.com/apidoc/core/Z … html#union
trunk/tests/Zend/Db/Select/TestCommon.php :
$sql1 = "SELECT $bug_id AS $id, $bug_status AS $name FROM $bugs"; $sql2 = "SELECT $product_id AS $id, $product_name AS $name FROM $products"; $select = $this->_db->select() ->union(array($sql1, $sql2)) ->order('id'); return $select;
Dernière modification par fte (21-08-2008 14:11:25)
Hors ligne
Merci pour la réponse,
Après avoir mis à jour ma version du framework j'essaye toujours de faire marcher l'Union.
$cat = new Categorie(); $cat3 = new Categorie(); $select = $cat->select()->where("id_parent = ?", Env::categorie() ); $select2 = $cat2->select()->where("id_cat = ?", Env::categorie() ); $select3 = $select2->union($select); echo $select3;
Lors de mon echo je n'ai que le résultat du 1er select mais pas de l'union des 2.
est ce que je l'utilise mal ???
Hors ligne
je fais un petit up du post car j'ai le même cas de figure ou je suis bloqué.
Si quelqu'un pouvait me dire pkoi le 1er select est affiché et non pas toute la requete avec l'union ?
Hors ligne
ok j'ai finalement réussit à faire marcher l'union mais seulement à moitié, je m'explique
$annonceJoin = new Annonce(); $finalSelect = $annonceJoin->_db->select()->union( array( $sql1, $sql2) ); annonceJoin->fetchAll($finalSelect);
ceci me génère un erreur:
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
Alors que le code ci dessous fonctionne.
$annonceJoin = new Annonce(); $finalSelect = $annonceJoin->_db->select()->union( array( $sql1, $sql2) ); $annonceJoin->_db->fetchAll($finalSelect); //ici ce trouve le changement
je pense qu'il y a un problème d'accès, mais comment je peux le résoudre pour que cela m'envoi un objet et non un tableau de résultat ? (en gros comment faire marcher le code qui génère l'erreur)
merci
Hors ligne
bucheron a écrit:
Code:
$cat = new Categorie(); $cat3 = new Categorie(); $select = $cat->select()->where("id_parent = ?", Env::categorie() ); $select2 = $cat2->select()->where("id_cat = ?", Env::categorie() ); $select3 = $select2->union($select); echo $select3;est ce que je l'utilise mal ???
Oui, il faut 3 objets Zend_Db_Select en tout. On construit les deux premiers, puis on en crée un troisième qui va réaliser l'union :
$select3->union(array($select1, $select2));
A noter : les règles de l'UNION SQL restent, il faut donc avoir les mêmes colonnes dans les deux select.
Dernière modification par mdelanno (10-12-2008 14:56:18)
Hors ligne