Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
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
il te faut utiliser une zend_db_expr
genre
$select = $db->select() ->from('matable') ->where('monchamps IN ' . new Zend_Db_Expr( $db->select()->from(........)));
Hors ligne
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 :
->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
Bonjour, je remonte ce petit topic, je n'arrive pas à faire cette requete :
$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
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