Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-06-2008 16:25:08

Gunshin
Nouveau membre
Date d'inscription: 02-06-2008
Messages: 3

Zend_Db_Select : Jointures multiples

Bonjour tous le monde

J'ai un probleme pour construire un select un peu complexe.  J'ai une fonction de recherche qui comprend plusieurs champs, et selon lesquels ont été remplis, je construit mon select en rajoutant des where, jusque la pas de probleme.

Le probleme vient du fait que j'ai besoin de récupérer des infos depuis plusieurs tables différentes, donc faut que je fasse des joins.

je tire mes données de 5 tables:
-project: qui contient les données générales communes à tous les type de projets (il y en a 4)
-feature_film: qui contient les données spécifiques aux projets de type feature film.
-music_video: idem que feature_film pour les projets de type music_video
-interactive_game: idem
-tv_serie: idem

Code:

$db = $this->getZendDb();
        $select    = $db->select();
        
        $select    ->from(array('p' => 'project'), '*')
                ->joinLeft(array('ff' => 'feature_film', 'tv' => 'tv_serie'), 'p.project_id = ff.project_id')
                ->joinLeft(array('tv' => 'tv_serie'), 'p.project_id = tv.project_id')
                ->joinLeft(array('ig' => 'interactive_game'), 'p.project_id = ig.project_id')
                ->joinLeft(array('mv' => 'music_video'), 'p.project_id = mv.project_id')
                
        if ($post['project_title'] != '')
            $select->where('p.project_title LIKE \'%'.$post['project_title'].'%\' OR p.project_old_title LIKE \'%'.$post['project_title'].'%\'');
        if ($post['typeproject'] != '')
            $select->where('p.project_type = ?', $post['typeproject']);
        if ($post['production'] != '')
            $select->where('ff.ff_production LIKE \'%'.$post['production'].'%\' OR mv.mv_production LIKE \'%'.$post['production'].'%\' OR tv.tv_production LIKE \'%'.$post['production'].'%\'');
        if ($post['distribution'] != '')
            $select->where('ig.ig_distibution LIKE \'%'.$post['distribution'].'%\' OR tv.tv_distribution LIKE \'%'.$post['distribution'].'%\'');
        if ($post['releasedate'] != '')
        {
            $date = Scriptbreakdown::getInstance()->datetotime($post['releasedate']);
            $select->where('ff.ff_usreleasedate > '.$date.' OR ig.ig_releasedate > '.$date.' OR mv.mv_projecteddate > '.$date.' OR tv.tv_startairingdate > '.$date);
        }
        if ($post['manager'] != '')
            $select->where('p.project_manager = ?', $post['manager']);
 
        $result = $db->fetchAll($select);

Et la requete fonctionne très bien, sauf pour un point...le champs project_id de chaque ligne est vide, sauf pour les project du type music_video...j'ai essayer de changer l'ordre des join, et j'ai mis interactive_game en 4ieme, et cette fois la je n'avais les project_id que pour les project du type interactive_game...

J'ai donc réussi à cerner le problème: le type de jointure semble etre la cause le mon probleme, mais voila je ne vois pas comment le résoudre...auriez-vous une idée?

Dernière modification par Gunshin (13-06-2008 15:57:05)

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