Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
$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