Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-08-2009 14:07:10

sguary
Membre
Lieu: Rennes
Date d'inscription: 23-02-2009
Messages: 15
Site web

Zend_Db_Select et Union

Bonjour,

Je me sers régulièrement des Zend_Db_Select. Je me sers également des unions.

Je rencontre un problème que j'ai solutionné temporairement en me passant des zend_db_select.

Dans les unions le nombre de colonnes dans les requêtes est identique. Pour cela je crée des colonnes null afin de réaliser un bourage.

Je ne sais pas comment syntaxer mon zend_db_select

Code:

$select1->from(array('t1' => 'table1'),'colonne11','colonne12' );

$select2->from(array('t2' => 'table2'),'colonne21',null );

$select3->union(array($select1,$select3));

Sur mon deuxième select seul une colonne m'intéresse.

Si vous avez des idées cette syntaxe ne fonctionne pas.

Hors ligne

 

#2 04-08-2009 15:13:58

Phil
Membre
Lieu: Lyon
Date d'inscription: 10-10-2008
Messages: 58

Re: Zend_Db_Select et Union

C'est pas un truc du genre

Code:

 $select1->union($select2);

?

Hors ligne

 

#3 04-08-2009 15:23:32

sguary
Membre
Lieu: Rennes
Date d'inscription: 23-02-2009
Messages: 15
Site web

Re: Zend_Db_Select et Union

non

Hors ligne

 

#4 04-08-2009 15:45:10

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

Re: Zend_Db_Select et Union

En regardant la doc, je n'ai pas l'impression qu'on puisse faire un union avec zend_db_select.

A+, Philippe


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

Hors ligne

 

#5 04-08-2009 15:50:10

Phil
Membre
Lieu: Lyon
Date d'inscription: 10-10-2008
Messages: 58

Re: Zend_Db_Select et Union

Désolé j'avais lu un peu en travers...

Code:

$select1->from(array('t1' => 'table1'), array('colonne11', 'colonne12'));

$select2->from(array('t2' => 'table2'), array('colonne21', null));

$select3->union(array($select1, $select3));

normalement c'est ça, dans la doc.. from ne prend que 3 paramètres (table,champ,typeSchema)..
Bon j'espère que c'est ça wink

Hors ligne

 

#6 04-08-2009 15:50:47

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

Re: Zend_Db_Select et Union

j'ai trouvé ce message sur z-f :
http://www.z-f.fr/forum/viewtopic.php?id=1733

donc en fait il semblerait que ça existe, mais si on regarde dans google, ça semble assez foireux.

Quand tu dis que ça ne fonctionne pas, est-ce que tu peux nous envoyer le message d'erreur à chaque fois, ça devrait nous aider à répondre.

A+, Philippe


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

Hors ligne

 

#7 04-08-2009 15:53:57

sguary
Membre
Lieu: Rennes
Date d'inscription: 23-02-2009
Messages: 15
Site web

Re: Zend_Db_Select et Union

http://framework.zend.com/apidoc/core/Z … html#union

Elle fonctionne je vous le confirme.

Hors ligne

 

#8 04-08-2009 19:11:07

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: Zend_Db_Select et Union

et en codant comme ceci:

Code:

$select -> from(array('a' => 'table1))
           -> joint(array('b' => 'table2'), 'a.id = b.id', array(columnb1, ...))

Hors ligne

 

#9 05-08-2009 17:00:56

Phil
Membre
Lieu: Lyon
Date d'inscription: 10-10-2008
Messages: 58

Re: Zend_Db_Select et Union

Bon j'ai été confronté au pb aujourd'hui...
En fait quand on regarde la requête générée par le framework c'est un truc du genre

Code:

SELECT ... FROM ...
UNION
SELECT ... FROM ...

Ça marche très bien pour des sélect "simples"

Par contre un fois qu'on y colle des "GROUP BY" ou des choses un peu plus complexes... ça marche moins bien

il faudrait plus un truc du genre :

Code:

(SELECT ... FROM ...)
UNION
(SELECT ... FROM ...)

A ce moment là tout passe...

Donc pour le moment j'ai surchargé la classe Zend_Db_Select... (oui c'est mal :p) pour rajouter les parenthèses..

Code:

class MyLib_Db_Select extends Zend_Db_Select 
{
    /**
     * Render UNION query
     *
     * @param string   $sql SQL query
     * @return string
     */
    protected function _renderUnion($sql)
    {
        if ($this->_parts[self::UNION]) {
            $parts = count($this->_parts[self::UNION]);
            foreach ($this->_parts[self::UNION] as $cnt => $union) {
                list($target, $type) = $union;
                if ($target instanceof Zend_Db_Select) {
                    $target = $target->assemble();
                }
                $sql .= '('.$target;
                if ($cnt < $parts - 1) {
                    $sql .= ') ' . $type . ' ';
                }
            }
            $sql.=')';
        }
        return $sql;
    }
}

Bon je sais pas si c'est de la que vient le problème.. ^^
Mais bon maintenant ça marche wink

Hors ligne

 

#10 30-09-2009 10:43:33

sguary
Membre
Lieu: Rennes
Date d'inscription: 23-02-2009
Messages: 15
Site web

Re: Zend_Db_Select et Union

Il faut que je teste.

J'avoue ne pas avoir beaucoup de temps.

C'est terrible pour quelque chose de si simple qu'il n'est pas prévu le coup.
Je pense que je devrai re tester en 1.9.3

Hors ligne

 

#11 17-11-2009 15:41:07

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: Zend_Db_Select et Union

Hello,

On peut voir qu'il y a quelques soucis sur cette fonctionnalité dans le bug tracker. Toutefois il apparait plutôt qu'il s'agisse de la doc qui ne soit pas à jour, même si on peut se poser la question soulevée plus haut des parenthèses en cas de SELECT complexe et même de l'obligation (apparemment) de passer par un troisième objet Zend_Db_Select pour que cela fonctionne.

Pour résumer, il faut que ce soit un array de string, un array de Zend_Db_Select pour que cela fonctionne.
Référence :

Benjamin Eberlei a écrit:

This is mainly a documentation issue. The union() method doc comment described functionality it did not have.

The only working example for union is to pass an array of sql query strings or Zend_Db_Select instances into its first parameter and render that.

I have added documentation on the issue into the Zend_Db_Select manual.

Voici apparemment le code pour que cela fonctionne, mais je vous conseille tout de même le code de Phil dans le cas de Select compliqué :

Code:

        $select1 = new Zend_Db_Select(Zend_Registry::get('db'));
        $select1->from('tableName1');

        $select2 = new Zend_Db_Select(Zend_Registry::get('db'));
        $select2->from('tableName2');

        $select3 = new Zend_Db_Select(Zend_Registry::get('db'));
        $select3->from('tableName3');

        $select4 = new Zend_Db_Select(Zend_Registry::get('db'));
        $select4->union(array($select1,$select2,$select3));
        Zend_Debug::dump($select4->__toString(),"<h1>QUERY</h1><br />");exit;

Voilà,

++
Fred

Hors ligne

 

#12 17-11-2009 16:46:40

sguary
Membre
Lieu: Rennes
Date d'inscription: 23-02-2009
Messages: 15
Site web

Re: Zend_Db_Select et Union

Bonjour et merci pour les réponses.

Mais je n'ai toujours pas de réponses pour le nombre de colonne à maintenir à null dans 1 requête et pas dans une autre.

Je ne me suis pas pencher sur mon problème depuis quelques temps. Mais je promets de regarder cela très vite.

Sébastien.

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