Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour
Dans les unions le nombre de colonnes dans les requêtes est identique.
Si j'ai plusieurs colonnes dont j'ai besoin dans une table et d'autre dans une autre table, il me faudra le même nombre de colonnes pour exécuter l'UNION...
Comment faire avec Zend?
J'ai essayé cela:
$select1 = $this->table1->select()->setIntegrityCheck(false) ->from (array('t1' => "table1"), array('c1' => 'colonne1', 'c2' => 'colonne2')) $select2 = $this->table2->select()->setIntegrityCheck(false) ->from (array('t2' => "table2"), array('c1' => 'colonne1', 'c2' => ' ')) $select = $db->select() ->union(array($select1, $select2))
Il me retourne:
SELECT `t1`.`colonne1` AS `c1`, `t1`.`colonne2` AS `c2` FROM `table1` AS `t1` UNION SELECT `t2`.`colonne1` AS `c1`, `t2`.`` AS `c2` FROM `table2` AS `t2`
et l'erreur:
Unknown column 't2.' in 'field list' ce qui est normal...
Comment faire avec zend? Pour obtenir:
SELECT `t1`.`colonne1` AS `c1`, `t1`.`colonne2` AS `c2` FROM `table1` AS `t1` UNION SELECT `t2`.`colonne1` AS `c1`, ' ' AS `c2` FROM `table2` AS `t2`
Comme ceci, ça fonctionne...
Merci d'avance de votre aide
Hors ligne
il me semble que ce n'est pas possible d'exécuter une requête dans un union avec un Zend_db_select
(car ce n'est pas valide avec toutes les sgbd)
il faut que tu passe directement par l'adaptateur et la méthode query()
edit: désolé, je me suis trompé, j'ai confondu avec un join
Dernière modification par etaty (20-02-2010 00:03:23)
Hors ligne
je serais obligé de faire une requête en dur?
du genre:
$sql1 = "SELECT t1.colonne1 AS c1, t1.colonne2 AS c2 FROM table1 AS t1"; $sql2 = "SELECT t2.colonne1 AS c1, ' ' AS c2 FROM table2 AS t2"; $requete= $sql1 . " UNION ALL " . $sql2; $tab = $this->_db->fetchAll($requete);
Ce n'est pas possible avec $db->select() ->union ... ?
Hors ligne
Juste de mémoire car c'est un truc que j'ai fait il y a super longtemps
$db->select() ->from('table1', array('c1' => 'colonne1', 'c2' => 'colonne2' )) ->where('ICI Condition sur Table1') ->union( $db->select() ->from('table2', array('c1' => 'colonne1', 'c2' => 'colonne2' )) ->where('ICI Condition sur Table2'), Zend_Db_Select::SQL_UNION_ALL )
c'est à voir précisément dans la doc mais le principe est celui-ci
A+JYT
Dernière modification par sekaijin (19-02-2010 17:15:03)
Hors ligne
oui mais mon champs table2.colonne2 n'existe pas... donc il me réenverra une erreur fait comme ça
Hors ligne
pour une colonne à valeur fix il faut utiliser Zend_Db_Expr
un truc genre
$db->select() ->from('table2', array('c1' => 'colonne1', 'c2' => new Zend_Db_Expr(' '))) ->where('ICI Condition sur Table2')
A+JYT
Hors ligne
Ok Merci ça fonctionne via:
'c2' => new Zend_Db_Expr('\'\'')
Mais après avoir fait:
$select = $this->_db->select() ->union(array($select1, $select2));
il me lance:
{"error":"erreur durant la construction du contr\u00f4leur","str_error":"\nException : Zend_Db_Select_Exception\nMessage : Unrecognized method 'union()'\n"}
J'ai installé la version 1.9 du framework...
Faut-il installé la version suivante pour qu'il reconnaisse la fonction UNION ?
Hors ligne
je ne sais pas à partir de quelle version
Hors ligne
j'ai mis à jour vers la 1.10 et ça fonctionne ;-)
Hors ligne