Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-02-2010 11:20:28

j3ff_std
Nouveau membre
Date d'inscription: 29-01-2010
Messages: 7

Zend_Db_Select et Union

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:

Code:

$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))
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Il me retourne:

Code:

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`
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

et l'erreur:
Unknown column 't2.' in 'field list' ce qui est normal...



Comment faire avec zend? Pour obtenir:

Code:

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`
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Comme ceci, ça fonctionne...


Merci d'avance de votre aide

Hors ligne

 

#2 19-02-2010 13:18:21

etaty
Membre
Date d'inscription: 16-10-2008
Messages: 49

Re: Zend_Db_Select et Union

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

 

#3 19-02-2010 15:36:57

j3ff_std
Nouveau membre
Date d'inscription: 29-01-2010
Messages: 7

Re: Zend_Db_Select et Union

je serais obligé de faire une requête en dur?
du genre:

Code:

$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);
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Ce n'est pas possible avec $db->select() ->union ...  ?

Hors ligne

 

#4 19-02-2010 17:12:06

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Db_Select et Union

Juste de mémoire car c'est un truc que j'ai fait il y a super longtemps

Code:

$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
)
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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

 

#5 22-02-2010 09:11:22

j3ff_std
Nouveau membre
Date d'inscription: 29-01-2010
Messages: 7

Re: Zend_Db_Select et Union

oui mais mon champs table2.colonne2 n'existe pas... donc il me réenverra une erreur fait comme ça

Hors ligne

 

#6 22-02-2010 14:45:34

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Db_Select et Union

pour une colonne à valeur fix il faut utiliser Zend_Db_Expr
un truc genre

Code:

  $db->select()
  ->from('table2', array('c1' => 'colonne1', 'c2' => new Zend_Db_Expr(' ')))
  ->where('ICI Condition sur Table2')
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

A+JYT

Hors ligne

 

#7 22-02-2010 16:14:28

j3ff_std
Nouveau membre
Date d'inscription: 29-01-2010
Messages: 7

Re: Zend_Db_Select et Union

Ok Merci ça fonctionne via:

Code:

'c2' => new Zend_Db_Expr('\'\'')
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Mais après avoir fait:

Code:

    $select = $this->_db->select()
            ->union(array($select1, $select2));
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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

 

#8 22-02-2010 18:00:21

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Db_Select et Union

je ne sais pas à partir de quelle version

Hors ligne

 

#9 23-02-2010 17:07:38

j3ff_std
Nouveau membre
Date d'inscription: 29-01-2010
Messages: 7

Re: Zend_Db_Select et Union

j'ai mis à jour vers la 1.10 et ça fonctionne ;-)

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