Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-07-2008 18:07:26

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

[Zend_Db_Select] Requête imbriquée

Bonsoir les devs,

J'aurais aimé connaître la façon de faire une requête imbriquée.

J'ai vu qu'il y avait une méthode toString() renvoyant la requête en format string. Est-ce que c'est la façon de faire ?
C'est à dire de créer un deuxième objet select et de l'inclure dans la condition where du premier en utilisant son toString ?
Mais ça me poserait problème car comment je peux utiliser des champs de la première query dans la deuxième alors hmm

Ou est-ce qu'il y a un autre moyen de faire cela ?

Merci.

Dernière modification par Akis (06-07-2008 18:08:43)

Hors ligne

 

#2 06-07-2008 20:39:54

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

Re: [Zend_Db_Select] Requête imbriquée

il te faut utiliser une zend_db_expr
genre

Code:

$select = $db->select()
->from('matable')
->where('monchamps IN ' . new Zend_Db_Expr( $db->select()->from(........)));

Hors ligne

 

#3 07-07-2008 16:13:35

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zend_Db_Select] Requête imbriquée

Je ne comprends pas bien l'intérêt de cet objet. Il ne fait que renvoyait le select en chaine de caractère. Au final, c'est la même chose que le toString() du select, non ?

En gros, j'ai réussi à faire le select imbriqué en mettant ceci :

Code:

->where('t.track_id IN ('.$selectIn->__toString().')')

Au final, je suppose que ça revient au même. Donc quel est l'intérêt de passer par un second objet ?

Hors ligne

 

#4 08-07-2008 00:38:46

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Db_Select] Requête imbriquée

L'esprit Orienté objet ? (plutôt qu'une string...)

Hors ligne

 

#5 20-05-2009 08:30:46

kreatik
Membre
Date d'inscription: 14-04-2009
Messages: 26

Re: [Zend_Db_Select] Requête imbriquée

Bonjour, je remonte ce petit topic, je n'arrive pas à faire cette requete :

Code:

$query = $db_reservations->select()
            ->setIntegrityCheck(false)
            ->from(
                    $db_reservations->select()->from(array('r'=>'reservations'),array('id_resa' => 'id' , 'chambre' , 'date_debut' , 'date_fin' , 'periode_jrs' => 'DATEDIFF(date_fin, date_debut )' , 'jrs_restants' => 'DATEDIFF(date_fin, NOW() )'))
                    ->where('date_fin >= NOW()')
                  )
            ->join(
                new Zend_Db_Expr('('.$db_reservations->select()->from(
                        array('c'=>'clients'), array('id_client' => 'id' , 'client_nom' => 'nom' , 'client_prenom' => 'prenom')
                        )
                    .')')
                ,'r.id_client = c.id',null
                    
                )
        ;

Cela ne fonctionne pas non plus parce que zend_de_expr me retourne pas ma chaine sad

Code:

SELECT `t`.* FROM (SELECT `r`.`id` AS `id_resa`, `r`.`chambre`, `r`.`date_debut`, `r`.`date_fin`, DATEDIFF(date_fin, date_debut ) AS `periode_jrs`, DATEDIFF(date_fin, NOW() ) AS `jrs_restants` FROM `reservations` AS `r` WHERE (date_fin >= NOW())) AS `t` INNER JOIN () AS `t_2` ON r.id_client = c.id

Dernière modification par kreatik (20-05-2009 08:51:36)

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